In article <46636F6B.2080908 / atdot.net>,
  SASADA Koichi <ko1 / atdot.net> writes:

>  ところで、lambda で生成した Proc オブジェクトを渡しています
> が、これはそういうもんでしょうか。

lambda だろうとなんだろうと、ブロックを指定する方法すべてに
ついて対応できなければラッパーとはいえません。

>  lambda で作った Proc オブジェクトはブロックパラメータの
> チェックを厳密に行う(ことになるらしい。まだ対応していない)の
> で、単にブロックを渡した場合(もしくは、Proc.new で作成した場
> 合)と異なるような気がしています。Proc#yield の場合は、この違
> いを無視するようにするんだと、勝手に思っていたのですが、そうで
> もないらしく。

異なるのは構いませんが、直接呼ぶのとラッパー経由で呼ぶのとで
同じ挙動になるようにしてください。

そのようにできない仕様には反対します。

一般に、呼び出される側での細工 (lambda とそうでないのとで変
えるとか) はラッパーで扱う値を変えなくて済むので仕様で悩む必
要はないはずです。もちろん、YARV での実装が容易かどうかとい
う点は別にあるでしょうが。

それに対し、呼び出す側の細工 (call で呼ぶのと yield で呼ぶの
を変えるとか) はラッパーで扱う値に反映させる必要が出てきます
から仕様から考え直す必要があります。

いずれにしても何を実現したくてそういう仕様になっているかを理
解してやるのがよいと思います。要求された仕様をそのまま実装す
ることが常に幸せにつながるというわけではありませんし。
-- 
[田中 哲][たなか あきら][Tanaka Akira]