some_hash[k] = v
Обычно, когда вы делаете это, то сохраняется , а не прямая ассоциация k => v
.Вместо этого у k
запрашивается хеш-код , который затем используется для сопоставления с v
.
Равные значения дают равные хеш-кодыВот почему ваш последний пример работает так, как он работает.
Несколько примеров:
1.9.3p0 :001 > s = 'string'
=> "string"
1.9.3p0 :002 > 'string'.hash
=> -895223107629439507
1.9.3p0 :003 > 'string'.hash == s.hash
=> true
1.9.3p0 :004 > 2.hash
=> 2271355725836199018
1.9.3p0 :005 > nil.hash
=> 2199521878082658865