From: Shin-ichiro HARA Date: 1997-11-19T17:59:24+09:00 Subject: [ruby-dev:866] Re: [Req] Proc.new 原です。 > まつもと ゆきひろです > |(1)Proc.new(x) で Proc.new{|t| send(x, *t)} > |みたいな意味にしてしまうのはいかが? > > 意味がひとめで分からないんで,却下 ^^;;; やっぱり。(^^; Perl では(Perl、Perl とうるさいけど) &foo という関数があるとき、 $bar = \&foo と簡単にとれて &$bar() として使えるわけですよね。こ れを ruby ではどう書きますか?と「Perl ユーザのための FAQ」には 出てくるはずです。(ほんとか?)それに対して、実はメソッドはオブ ジェクトにできて、 bar = Proc.new{ |*x| foo(*x) } bar.call() と使うんだよ、と答えることになるでしょう。そこを bar = proc(:foo) bar() と答えられたらかっこいいかなと思ったわけですよ。 > |(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は [] の方が嬉しいよなあ.これまたどうしよう. そうですよね。