From: matz@... (Yukihiro Matsumoto) Date: 2000-12-18T16:33:56+09:00 Subject: [ruby-list:26604] Re: Hash.new, fetch, block argument, default まつもと ゆきひろです In message "[ruby-list:26603] Hash.new, fetch, block argument, default" on 00/12/18, Yasushi Shoji writes: |> たとえば、ブロックによるデフォルトならば、代入することに意味 |> があるのかもしれませんが、参照しただけでデフォルト値が追加さ |> れることには反対です。 | |blockだったら追加されても良いなら、defaultだって追加されても良いのでわ? 引っかかり具合が違うんだろうなとは思います。それが閾値を超え ているかどうかは検討の余地ありと。 つまり、単なる値が追加されることは、*私の*認められるレベルを 下まわるが、ブロックだったら越える*かもしれない*と。 |で、こんなのどうでしょう? | |hash = Hash.new {|key| self[key] = Array.new} | |hash['key'] #=> [] | |該当する keyが無いときに評価する blockに keyを渡してやれば、自分で代入す |るなりなんなりできるんじゃないかと思うんですがどうでしょ? fetchも同様に |blockには keyを渡すと。 もとより、ブロックにはキーを渡すつもりでしたが、このコードを 見てるとハッシュ自身も渡したほうが良いかもですね。 まつもと ゆきひろ /:|)