Webサイト作成のためにRubyを勉強中。lambdaとかのっけからいろいろ出てきてますw
――とりあえず、今日覚えたことは、lambdaメソッドで作るProcオブジェクトと、Object#methodで作るMethodオブジェクトの扱いは違うみたい。前者で作ったオブジェクトをcallして、さらにブロックを渡すと怒られますが、後者は怒られなかった。
mod_if = lambda{|args| p args yield 10 yield 20 yield 30 } mod_if.call(["a", "b", "c"]){|v| p v }
このばあい、mod_if.callを呼んだ時点でLocalJumpError(no block given)が発生します。原因は不明(LocalJumpError#reasonは:noreason リファレンスには記載のない値です)
しかしこうすると、うまくいく
def mod_if(args) p args yield 10 yield 20 yield 30 end c = self.method(:mod_if) c.call(["a", "b", "c"]){|v| p v }
この場合出力は以下となります
["a", "b", "c"]
10
20
30
たぶん実運用では後者を使うことになるので良いでしょうが、なんだか気になりますね。なんででしょう。