[#837] request SCAN — Shin-ichiro HARA <sinara@...>

原です。

25 messages 1997/11/14
[#838] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#839] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#840] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#841] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#843] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#844] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#845] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#864] [Req] Proc.new — Shin-ichiro HARA <sinara@...>

原です。

53 messages 1997/11/19
[#865] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#866] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/19

原です。

[#867] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#875] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#877] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#879] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#886] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#890] Re: [Req] Proc.new — keiju@... (石塚圭樹 ) 1997/11/20

けいじゅ@日本ラショナルソフトウェアです.

[ruby-dev:867] Re: [Req] Proc.new

From: matz@... (Yukihiro Matsumoto)
Date: 1997-11-19 09:22:56 UTC
List: ruby-dev #867
まつもと ゆきひろです

In message "[ruby-dev:866] Re: [Req] Proc.new"
    on 97/11/19, Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp> writes:

|原です。

|Perl では(Perl、Perl とうるさいけど) &foo という関数があるとき、
|$bar = \&foo と簡単にとれて &$bar() として使えるわけですよね。こ
|れを ruby ではどう書きますか?と「Perl ユーザのための FAQ」には
|出てくるはずです。(ほんとか?)それに対して、実はメソッドはオブ
|ジェクトにできて、
|
|bar = Proc.new{ |*x| foo(*x) }
|bar.call()
|
|と使うんだよ、と答えることになるでしょう。そこを
|
|bar = proc(:foo)
|bar()
|
|と答えられたらかっこいいかなと思ったわけですよ。

まあ,その気持ちは分かるんですけど,Rubyのモデルではやっぱり
メソッドはオブジェクトではないので,別のやり方の方が他との整
合性からも望ましいわけです.たぶん,これができるようになると
こんどは「foo.barをオブジェクト化できる」という話が出て,泥
沼化してしまうのではないでしょうか? メソッドをオブジェクト
化するにしても別の方法を考えた方が良いと思います.

|> |(2)foo() で、メソッド foo が定義されていない時 foo.call()
|> |を呼び出してしまうのはどうでしょう?
|> 
|> 構文的にはきれいですが,動作が複雑だなあ.どうしよう.
|
|メソッドもオブジェクトだったら面白いかなと思ったりした事あるけど、
|これだと「オブジェクトがメソッド」みたいで楽しいんじゃないかな。

ええ,記法の問題としては面白いと思います.だから悩むわけで.

|> |(3)今見つけました。バグかも。

|> おそらくは1引数の時の挙動をイテレータよりも関数に合わ
|> せたかったのではないかと推測します.この手当をしないと
|> bar.call(1)でxが[1]になってしまいますから.
|
|あ、そうか。
|
|> でも,foo.callは [] の方が嬉しいよなあ.これまたどうしよう.
|
|そうですよね。

おそらく

  foo = Proc.new { |*x| p x }
  foo.call()      #=> []
  foo.call(1)     #=> [1]
  foo.call(2,3)   #=> [2,3]

  bar = Proc.new { |x| p x }
  bar.call()      #=> nil
  bar.call(25)    #=> 25
  bar.call(25, 26)#=> [25,26]

  baz = Proc.new { |x,y| p [x,y] }
  baz.call()      #=>[nil,nil]
  baz.call(25)    #=>[25,nil]
  baz.call(25, 26)#=>[25,26]

となるのが望ましいと思うんですけど,どうでしょう?

                                まつもと ゆきひろ /:|)

In This Thread