I think that this is now well outside the scope of the original topic, 
so I will briefly say that implementing a semantically appropriate 
#eql? and #hash on your class is the way to make them behave as 
expected when used as hash keys and with methods like Array#&, honoring 
the principle of least surprise. It is as normal (and useful) as 
implementing #== for simple comparisons.

I hope that other Rubyists that may stumble upon this thread will take 
Robert's FUD with a grain of salt and will feel free to determine the 
usefulness and any potential dangers of implementing #eql? and #hash -- 
along with other Ruby idioms like #each (for Enumerable) and #<=> (for 
Comparable) -- on their own. An ounce of critical thinking is better 
than a pound of dogma.

-- 
Rein Henrichs
http://puppetlabs.com
http://reinh.com