まつもと ゆきひろです

In message "[ruby-dev:22246] Re: block to method by proc"
    on 03/12/12, nobu.nakada / nifty.ne.jp <nobu.nakada / nifty.ne.jp> writes:

|> これとProc#callにブロックが指定された場合については、ずっと
|> 悩んでいるんです。define_methodのブロックの内部でだけ与えら
|> れているブロックをすりかえるというのは、なんだかやってはいけ
|> ない「マジック」のような気がして。
|
|それは元のコンテキストのブロックが呼べなくなってしまうわけです
|よね。それはそれで嬉しくないような。

そういうことです。もっともdefine_methodの場合にはあまり問題
ないと思います。Procの場合には、

  * 元のコンテキストのブロックが呼びたい場合
  * callのブロックを受け取りたい場合

の両方がありえるでしょうから、抵抗があります。

|> でも、instance_evalでselfのすり替えとかしてるかな問題ないの
|> かなあ。
|
|  proc {|&block| block.call(1)}.call {|x| p x}
|
|とか考えたんですけど、いまいちかも。

&blockが受けるものとyieldが呼ぶブロックが違う場合があるとい
うことですか。それはどうかなあ。