原(信)です。

In message "[ruby-list:33219] Re: Method passing block"
    on 02/01/08, Yukihiro Matsumoto <matz / ruby-lang.org> writes:
|
|まつもと ゆきひろです

||ああ、大きな変更だなあと思ったらバグですか。でも、この block_given? 
||は偽なのに yield は可能というのは、なかなか納得のできる仕様だなあ、と
||も思います。多分、見た目がきれいになるプログラムが大いのではないでしょう
||か。
||
||効率を落すのでなければ、1.6.5仕様を採用してしまったらどうでしょう?
|
|いやあ、さすがにblock_given?が偽なのに(さらにdefined? yield
|まで偽なのに)yieldできるってのは私には受け入れがたいですねえ。

block_given? は起動したメソッドが構文上ブロックを伴っているかを判定
するとするわけです。今回のバグであまり文句をいう人がいなかったのをみると、
互換性もあまり問題にならないみたいだし、ブロックを連れ回すプログラムを書
く時は便利な気がしますけど。

あるいは、

  def foo(&b)
    bar(&b)
  end

を

  def foo( )
    bar( &)
  end

と書けるようにするとか?

#先のはやっぱり2重投稿になってしまいました。こちら側サーバーが調子
#悪かったみたいです。すいません。