Rubyはハッシュに数値と文字列のkeyが持てるんですね
Rubyで書かれたコードにbugがあって調べることになり、初めて知りました。
Ruby
% ruby -e 'h = {1 => true, "1" => false}; p h' {1=>true, "1"=>false}
Perl
% perl -MData::Dumper -e '$h = {1 => true, "1" => false}; warn Dumper $h' $VAR1 = { '1' => 'false' };
PHP
% php -r '$h = array(1 => true, "1" => false); var_dump($h);' array(1) { [1]=> bool(false) }
追記
@lesamoureuses @chisei :-)メンション消してしもたので リファレンスへのポインタを再度かいときますURLの要約部分"キーには任意の種類のオブジェクトを用いることができますが〜"の下りでした。
ということで、
- Object#hash ハッシュの格納に用いられるハッシュ値の計算
- Object#eql? キーの同一性判定
の2つを定義すれば何でもkeyになるよという話。
ハッシュの特性を考えれば確かにそうですよねそうですよね。