ツイッターで「Ruby の Hash のキーにするオブジェクトに hash と eql? を定義しないといけないのなんでなんだろう」という話題が出て、「おそらく Hash の名前の通り、Hash テーブルを lookup するのにキーの hash 値を計算するのに使ってるんだろうね」という話になったのだけれど、「じゃあhash.c 読んでみようぜ」って感じになって、一部読んだ。2.0.0-p0のコードです。 (一部markdownが注釈と解釈されておかしなことになってるの防ぐためにスペースを余分に入れてある) まずは、Hash#[ ] の実装がどこにあるのか見る。 hash.c の 3448 行目見るとわかる。 rb_define_method(rb_cHash,"[ ]", rb_hash_aref, 1); Hash#[ ] の実体は rb_hash_aref というCの関数である。じ