From: matz@... (Yukihiro Matsumoto) Date: 1997-11-19T17:31:29+09:00 Subject: [ruby-dev:865] Re: [Req] Proc.new まつもと ゆきひろです In message "[ruby-dev:864] [Req] Proc.new" on 97/11/19, Shin-ichiro HARA writes: |原です。 | |思いつきシリーズです。 | |却下するのに特に理由を明確にする事を求めるものでは |ありません。:-) | |(1)Proc.new(x) で Proc.new{|t| send(x, *t)} |みたいな意味にしてしまうのはいかが? 意味がひとめで分からないんで,却下 ^^;;; |(2)foo() で、メソッド foo が定義されていない時 foo.call() |を呼び出してしまうのはどうでしょう? 構文的にはきれいですが,動作が複雑だなあ.どうしよう. |(3)今見つけました。バグかも。 | |foo = Proc.new { |*x| p x } |foo.call() | |bar = Proc.new { |x| p x } |bar.call() | |とすると nil, FALSE となりますが、これは [], [] が正しいのでは? そうですねえ.今ソースを見るとわざわざそうしているんですね. なんでこうしているのかよく思い出せないのですが(アルツハイマー か?),おそらくは1引数の時の挙動をイテレータよりも関数に合わ せたかったのではないかと推測します.この手当をしないと bar.call(1)でxが[1]になってしまいますから. でも,foo.callは [] の方が嬉しいよなあ.これまたどうしよう. |def baz(*x); yield(*x); end | |とすると core dump します。 これは間違いなくバグです. --- parse.y~ Tue Sep 30 10:09:45 1997 +++ parse.y Wed Nov 19 17:20:22 1997 @@ -697,3 +697,4 @@ { - $$ = $2; + value_expr($2); + $$ = NEW_LIST($2); }