新井です。

In message "[ruby-dev:20358] Re: 1.8.0 preview3 schedule"
  on 17 Jun 2003 10:56:49 +0900,
  matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> まつもと ゆきひろです

> という説明の仕方は混乱を招くので、
> 
>   * Proc.newおよびブロック引数で与えられるProcは、引数チェッ
>     クがゆるい。breakやnextが例外になる
>   * lambdaおよびprocが返すProcは、引数チェックが厳しい。
>     breakやnextは実行の中断
> 
> という説明にしましょう。

なるほど、このまま 1.8 feature のページに書かせていただきました。

> |・今まで、rb_f_lambda() だったものは代わりに rb_block_proc() を使うべき?
> 
> はい。

以下のように、rb_f_lambda() は現時点で rb_block_proc() と違
うようなのですが、これに関して移行措置はないのでしょうか?
# 影響がどの程度あるのかわかってないです

    VALUE
    rb_block_proc()
    {
	return proc_alloc(rb_cProc, Qfalse);
    }

    VALUE
    rb_f_lambda()
    {
	rb_warn("rb_f_lambda() is deprecated; use rb_block_proc() instead");
	return proc_alloc(rb_cProc, Qtrue);
    }

> ブロックパラメータがひとつの場合には、今回の件とは独立にブロッ
> クパラメータの使い方を矯正するために警告を出してます。
> 
> つまり、以前は|a|は解釈として|a,|(引数が一つの時)と|*a|(引数
> が複数の時)の中間の働きをしていましたが、これを|a,|と同じ解
> 釈にするための移行措置です。

これは、Proc だけの話なのでしょうか?つまり、

    def foo
      yield 1,2,3
    end
    foo {|args| p args}
	=> ruby 1.6.8 (2002-12-24) [i586-linux]
	   [1, 2, 3]
	=> ruby 1.8.0 (2003-06-16) [i586-linux]
	   [1, 2, 3]

に関して移行の必要はないということでしょうか。

でも、sort とかは警告が出るからイテレータも警告を出す場合と
出さない場合があります。

    [1,2,3].sort {|args| p args; 1}
	=> ruby 1.6.8 (2002-12-24) [i586-linux]
	   [1, 2]
	   [2, 3]
	=> -:1: warning: multiple values for a block parameter (2 for 1)
	   ruby 1.8.0 (2003-06-16) [i586-linux]
	   [1, 2]
	   -:1: warning: multiple values for a block parameter (2 for 1)
	   [2, 3]

--
新井康司 (Koji Arai)