From: Inaba Hiroto Date: 1999-02-24T17:38:13+09:00 Subject: [ruby-dev:5601] Re: Hash.new 稲葉です. From: matz@netlab.co.jp (Yukihiro Matsumoto) Date: Wed, 24 Feb 1999 15:36:15 +0900 > In message "[ruby-dev:5574] Re: Hash.new" > on 99/02/24, GOTO Kentaro writes: > > |>えーと,この提案の本質は dup ですか? > |>それとも self[newkey] = ifnone ですか? > | > |両方です.最初は前者だけかと思いましたが,登録も > |しないといまいち使えないのに気づきました. > > なるほど,ごとけんさんの主張は理解しました.私の考えを表明し > ておくと,この提案には(両方に)抵抗があり,その度合は > > dup > self[newkey] = ifnone > > です. 提案です. 誰かが書いてたような気もするのですが, Hash.new(ifnone)ではdupもキー登録もせず, かわりに追加機能として, Hash.new はブロックを与える事ができ, そうして生成されたハッシュでは, キーがなかった場合はそのブロックが実行されてその値が返される, ってのは どうでしょう? h = Hash.new{ [].dup } h["foo"] << "!!" p h.keys #=> [] p h["bar"] #=> [] h = Hash.new{|k| self[k] = [].dup } # {|h,k| h[k] = [].dup }の方がいい? h["foo"] << "!!" p h.keys #=> ["foo"] p h["bar"] #=> [] -- 稲葉 浩人