Quando chiamo Array#-
che non sembra per chiamare qualsiasi metodo di confronto sulle corde sto paragonando:In che modo Array # - (operatore di sottrazione) confronta gli elementi per l'uguaglianza?
class String
def <=>(v)
puts "#{self} <=> #{v}"
super(v)
end
def ==(v)
puts "#{self} == #{v}"
super(v)
end
def =~(v)
puts "#{self} =~ #{v}"
super(v)
end
def ===(v)
puts "#{self} == #{v}"
super(v)
end
def eql?(v)
puts "#{self}.eql? #{v}"
super(v)
end
def equal?(v)
puts "#{self}.equal? #{v}"
super(v)
end
def hash()
puts "#{self}.hash"
super
end
end
p %w{one two three} - %w{two}
Si restituisce solo:
["one", "three"]
Quindi, qual è Array#-
facendo?
Inoltre, sto usando Ruby 1.9.2p290. In 1.8.7 sembra causare un loop infinito.
Provare a richiamarlo con 'irb' (!). Dopo aver letto la definizione della classe, passa ad un ciclo infinito. –
@JoshLee Cosa vuoi dire che entra in un ciclo infinito? Quando eseguire lo script esce senza alcun problema – Zequez
esso stampa N == N N == m m == m N == n m == n M == n l == n più e più volte ... –