From: Wakou Aoyama Date: 2000-12-28T08:47:52+09:00 Subject: [ruby-list:26906] Re: cgi.rb
element BUG 青山です。 On Wed, 27 Dec 2000 00:05:47 +0900, MoonWolf wrote: > Hash#has_key?で判定する前にkeyをupcaseしてやらないと > cgi.form({"method"=>"get"}) > の様に小文字で指定した時に意図した通りに動きません。属性は大文字で書くと > ドキュメントに明記するかupcaseで正規化してからhas_key?したほうが良いので > は? これ、ちょっと悩みますね。Hash を使っているのは、総スキャンせずに素早 く key にアクセスできるという利点があるからなので、upcase での正規化と いう作業を入れてしまうと、そのメリットが無くなってしまいますので。 基本的には、Hash の key は大文字小文字を区別するのは当然なので、サンプ ルと同じ key を使うというのは暗黙の了解と見て頂きたいというか。 (ここに大文字でと書くと、CGI#header() の方には小文字で、と、個々の説明 が繁雑になりそうな心配が。net/telnet などは、"Binmode" なんていう key を使用していますし...) しかし、それを明記するか、補佐するかして欲しいというのはわかりますので、 「Hash の key は大文字小文字を区別します。サンプルと同じように記述して下さい。」 という記述の追加で良いでしょうか? Key of Hash distinguishes between uppercase and small letter. Please describe it same as a sample. 英文もいまいち心配。間違いなど指摘して頂けると嬉しいです。 しかし、大文字小文字を意識せずに引き渡す、効率的に取り出す方法というの は、今後検討してみると良さそうですね。 >> hash.each_key{|i| i.upcase! } TypeError: can't modify frozen string >> hash.invert.each_value{|i| i.upcase! }.invert TypeError: can't modify frozen string ああ、一度 Hash の key に使ってしまうと、もうだめなんですね。 なお、修正は、cvs が復帰しているようなので、そちらに入れてみます。 (しばらく待って、上の英文に問題が無さそうであれば) -- 青山 和光 Wakou Aoyama