Как уже отмечали другие, вам нужно переопределить #==
в вашем классе. Одна ошибка, однако, это хеш-таблицы. Если вы хотите, чтобы два разных экземпляра вашего класса с o1 == o2 #=> true
хешировали одно и то же значение в хеш-таблице, вам нужно переопределить #hash
и #eql?
, чтобы хеш-таблица знала, что они представляют одно и то же значение.
class Foo
def initialize(x,y,z)
@x,@y,@z = x,y,z
end
def ==(other)
@y == other.instance_eval { @y }
end
end
o1 = Foo.new(0, :frog, 2)
o2 = Foo.new(1, :frog, 3)
o1 == o2 #=> true
h1 = Hash.new
h1[o1] = :jump
h1[o2] #=> nil
class Foo
def hash
@y.hash
end
def eql?(other)
self == other
end
end
h2 = Hash.new
h2[o1] = :jump_again
h2[o2] #=> :jump_again