まつもと ゆきひろです

In message "[ruby-dev:23580] Re: Ruby2.0 spec summary around parameters and variables"
    on 04/05/23, Minero Aoki <aamine / loveruby.net> writes:

|> |思ったんですが、いっそ a,b=1 をエラーにしてしまったほうが
|> |よくないですか。
|> 
|> 多重代入でも両辺の数を合わせた方が良いということでしょうか。
|
|はい。少なくとも左辺と右辺で代入の種類を揃えるべきだと思います。
|(つまり代入は lhs = rhs または mlhs = mrhs でなくてはならず、
|lhs = mrhs および mlhs = rhs はエラー。)

種類を揃えるんですね。それは納得できる..かなあ。文法的には許
さざるをえない(メソッドはなにを返すかあらかじめ分からない)の
で、動的にエラーにするんですよね。AssignmentErrorのようなの
を新設する必要があるかしら。

|> あとは、ブロックの中でyieldした場合、暗黙のブロック(yieldの
|> 対象)は外側のものを継承する必要がありそうです。関数(or メソッ
|> ド)と考えるとちょっと気持ちが悪いのですが。
|
|ええと、こういう話ですか。
|
|  def m1
|    lambda {
|      yield
|    }
|  end
|  block = m1 { p "method" }
|  block.call { p "call" }   #=> "method"
|
|
|  def m2
|    lambda {|&b|
|      yield
|    }
|  end
|  block = m2 { p "method" }
|  block.call { p "call" }   # これが "call" でなく "method" になる、ということ?

そゆことです。m2のyieldがb.callであれば"call"になります。
この方がわかりやすそうな気がするんですが、どうでしょう。