Aquí hay un código de ejemplo:¿Cómo funciona Ruby's Array? comparar elementos para la igualdad?
class Obj
attr :c, true
def == that
p '=='
that.c == self.c
end
def <=> that
p '<=>'
that.c <=> self.c
end
def equal? that
p 'equal?'
that.c.equal? self.c
end
def eql? that
p 'eql?'
that.c.eql? self.c
end
end
a = Obj.new
b = Obj.new
a.c = 1
b.c = 1
p [a] | [b]
imprime 2 objetos pero debe imprimir 1 objeto. Ninguno de los métodos de comparación se llama. ¿Cómo es Array? comparando por la igualdad?
Solo para confirmar: ¿el método Ruby's Array # hash garantiza que los valores serán iguales si y solo si el contenido de las matrices es igual? –
@EricWalker No. Se garantiza que los hashs de dos matrices son iguales si (pero no solo si) ambas matrices contienen elementos con los mismos valores hash en el mismo orden. Sin embargo, esto no está relacionado con esta pregunta, ya que aquí el hash solo se usa en los elementos, nunca en las matrices. – sepp2k