Comparisons in Ruby

Ruby is a dynamic and a true Object oriented language.Due to which ruby has a lot of ways to compare two objects.To be exact it has 4 different ways to compare objects that I am aware of.To understand Ruby objects and equality comparison works lets create a class.
Since I have been playing a bunch of iPad games.Lets create a game object
Lets get some game instances to work with.Now comparing with the == operator.
As you can see creating two game object with the same title and comparing them gives you a false result.
This is because the == comparator compares the object’s identity.To get the objects identity.Send the object_id message to it.
Now comparing with the equal? operator.
The equal? operator works the same way as the == operator.But unlike the == operator the equal? operator must never be overwritten as it is used internally by ruby to compare object identity.

The eql? operator
The eql operator works a bit differently compared the above two comparators.It compares the hashes between two objects.Even though the final result tends to be similar to ==. Lastly we have the === operator.
The triple equal operator is used in case statement comparison.

So now which operator do I use and when.
1. Double Equal operator:According to ruby conventions, if you want to compare two objects which you own ,you can override the == operator to make it compare properties in your object.

class Game
  attr_reader :title
  def initialize(title)
    @title = title
  end
  def ==(other)
    other.is_a?(self.class) && @title == other.title
  end
end

 

When you try to compare 1 == 1.0 you will get true because ruby casts 1 as to a Numeric class and then compares with the 1.0.

2. Triple Equal operator: Like double equal you can use the triple equal operator to compare two objects and also override it to get your desired result.

3.equal?: The equal? operator is used by ruby so use it carefully and never override it.

4.eql?: Like the equal? operator it is better not to override the eql operator and use it to compare both the class and equality of two objects.

  • Arghhh.. You told me this game was called “Van glory”, and I searched for ages without finding it. Turns out it is VAIn Glory XD