背景
メッソドチェインは便利(?)だけど、チェインの構成要素を単体テストするときに困る。 そこでブロックをlambdaなどで変数化したいと思うが、そのlambda内でyieldしたいときがある。 例えば、a = lambda { |t,x| (1..t).each { yield x } } a.call(10000, 'abc') { |x| puts x }みたいな感じで。 ただこれを実行すると、
LocalJumpError: no block given (yield)というエラーが出る。
yieldは出来ないが
lambda のブロックの引数に、&blockなどを書き、それをcallすることで、yield的なことは出来る。a = lambda { |t,x,&block| (1..t).each { block.call x } } a.call(10000, 'abc') { |x| puts x }yieldって関数専用なのだろうか。ブロックも引数を撮れるのだから、対応しておいてもらえるといいのに。
参考: lambda - Ruby: yield block from a block? - Stack Overflow