Ecco qualche esempio di codice:Come fa la matrice di Ruby. | confrontare elementi per l'uguaglianza?
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]
esso stampa 2 oggetti ma dovrebbe stampare 1 oggetto. Nessuno dei metodi di confronto viene chiamato. Come è la matrice. | confrontando per l'uguaglianza?
Giusto per confermare: il metodo di hash # Array di Ruby garantisce che i valori saranno uguali se e solo se il contenuto degli array è uguale? –
@EricWalker No. È garantito che gli hash di due array sono uguali se (ma non solo se) entrambi gli array contengono elementi con gli stessi valori hash nello stesso ordine. Tuttavia questo non è correlato a questa domanda poiché qui l'hash è chiamato solo sugli elementi, mai sugli array stessi. – sepp2k