From: Takaaki Tateishi Date: 2002-01-05T00:58:44+09:00 Subject: [ruby-dev:15628] Re: rb_hash_initialize 立石です. At Fri, 4 Jan 2002 18:10:51 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > |rb_hash_aref()については複数の引数をとれるようになると嬉し > |いです.そして,callというエイリアスも付けるというのはどう > |でしょうか? > これって具体的にはなにを意味するんでしょうか? 例えば, hash = Hash.new{|h,key| h[key] = key[0] + key[1]} としたときに, hash[1,2] # => 3 とできるといいなと思っていました. そして,Hash#[]のエイリアスとしてcallが定義されているとして,同様に hash.call(1,2) # => 3 とできると,ProcやMethodと同様にcallメソッドがあるオブジェクトとして 扱えるようになります. 単純に,Proc,Methodと同じように扱いたかったというだけです. > hash[a,b,c] > としたときに > defalt_proc.call(a,b,c) > が実行されるといいなということ? こちらは他のメソッドに初期化を委譲するという感じでしょうか? > もしそうなら、それはHashの意味を変えちゃうんで受け入れがたい > 印象があります。 Hash#call というのも Hash の意味からはずれてしまう気もしますが, 実行結果をキャッシュするという使われ方をする場合には,call があ る方が良い気がします. ところで,初期化のためのブロックは,Hashオブジェクト自身も引数 にとり, Hash.new{|h,key| h[key] = key + 1} としますが, Hash.new{|key| key + 1} としなかったのは,他のキーに対する値を変更できるという理由からで しょうか? -- Takaaki Tateishi