青山です。

On Wed, 27 Dec 2000 00:05:47 +0900,
MoonWolf <moonwolf / moonwolf.com> 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  <wakou / fsinet.or.jp>