From: "K.Kosako" Date: 2001-07-09T14:55:57+09:00 Subject: [ruby-dev:13775] Re: Hash with block (Re: GenerativeHash) TAKAHASHI Masayoshiさんの <200107090428.NAA16847@mx.inac.co.jp>から > あるいは、 > * ブロック付きでnewを呼んでいた場合、 > * Hash#default, Hash#default= はエラー。 > * Hash#default_block で Procを返す。 > * Hash#default_block= でProcを再設定。 > > * ブロックなしでnewを呼んでいた場合、 > * Hash#default_block, Hash#default_block= はエラー。 > * Hash#default、Hash#default= の挙動は現状のまま 生成方法によって、後で制約を受けるというのが少し面白くないです。 "デフォルト値"と"デフォルト処理手続き(ブロック)"の どちらか一方をいつでも指定できるほうが、うれしいと思います。 以下でどうでしょうか? "デフォルト処理手続き"が指定されている場合は、 Hash#defaultは、nilを返す。 Hash#default=は、デフォルト値をセットし、 デフォルト処理手続きをクリアする。 以下のメソッドを追加します。 Hash#default_proc 登録されているデフォルト処理手続きを返す。(ない場合はnil) ブロック付きで呼ばれれば、それをデフォルト処理手続きにして、 デフォルト値をnilにする。 Hash#default_proc= 指定された手続きをデフォルト処理手続きにして、デフォルト値をnilにする。 -- 小迫@ソフネック 渋谷区恵比寿1-15-1