From: Tietew Date: 2003-10-29T11:33:56+09:00 Subject: [ruby-list:38695] Re: cgi.params のデフォルト値 On Tue, 28 Oct 2003 23:35:04 +0900 In article <1067351702.825525.8149.nullmailer@picachu.netlab.jp> [[ruby-list:38693] Re: cgi.params のデフォルト値] matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > |> def CGI::parse(query) > |> params = Hash.new([]) > |> になってますが > |> params = Hash.new{|hash,key|hash[key]=[]} > |> にすべきでは? > | > |このようにすると、 > | > |params = Hash.new{|hash,key|hash[key]=[]} > |p params.has_key?('hoge') # => false > |hoge, = params['hoge'] > |p params.has_key?('hoge') # => true > | > |と、元は未定義であったものが、参照しただけで定義されてしまう > |ようです。 > > そうですね。 > > |各フィールドの値をローカル変数に代入してから、入力フォームに > |存在しているフィールドのリストを得ようとするとはまりそうです。 > > どっちがより深刻な問題ですかねえ。両方を満足させることはでき > ないわけで。 freeze してあげるのが現実解じゃないでしょうか。確か ENV の返値も 同じ理由で freeze したのでは。 params = Hash.new([].freeze) —[ Tietew ]—————————————————————————— メ : tietew@tietew.net / tietew@raug.net / tietew@masuclub.net ホペ: http://www.tietew.net/ Tietew Windows Lab. http://www.masuclub.net/ 鱒倶楽部 指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA