Как указывает maerics, если вы не определили свой собственный метод хеширования для класса, который вы используете, хеш может быть просто на самом объекте, а не на его содержимом. Тем не менее, вы можете (и должны) определить свой собственный хеш-метод для любого класса, в котором вы определяете метод equals.
В Ruby класс String уже делает это для вас:
irb(main):001:0> test="a"
=> "a"
irb(main):002:0> test2="a"
=> "a"
irb(main):003:0> test.hash
=> 100
irb(main):004:0> test2.hash
=> 100
irb(main):005:0> test2[0]=test.slice(0)
=> 97
irb(main):006:0> test2
=> "a"
irb(main):007:0> test2.hash
=> 100
Я не нашел эквивалентного текста для Ruby, но эта страница на Java предоставляет отличный алгоритм для генерации собственного хеш-кода, который нетрудно скопировать для Ruby: http://www.javapractices.com/topic/TopicAction.do?Id=28