From: Mark Volkmann Date: 2006-05-05T23:44:59+09:00 Subject: comparing objects Comparing objects in Ruby can be a little confusing. Let me know if I've got this straight. eql? - determines whether two object references refer to objects that have the same "value" - for example, my_car.eql?(your_car) could test whether my car and your car have the same make, model and year - need to override this method in the Car class to be meaningful, otherwise it's the same as == equal? - determines whether two object references refer to the same object in memory (have the same object id) - for example, my_car.equal?(your_car) tests whether we share the same car == - sometimes same as equal?, but sometimes different - for example, mixing in the Comparable module changes it to be based on <=> which would be overridden I kind of wish that "eql?" was named "same_value" and "equal?" was named "same_object?" so it would be easier to remember. Using "==" seems somewhat dangerous unless you're working with built-in types or types that you know mixin Comparable. Otherwise there is some uncertainty about what it does without looking at the code of the classes being compared. -- R. Mark Volkmann Object Computing, Inc.