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.