Kiedy zadzwonić Array#-
to nie wydaje się, aby wywołać dowolną metodę porównawczą na strunach mam porównanie:W jaki sposób tablica # - (operator odejmowania) porównuje elementy pod kątem równości?
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}
To właśnie powraca:
["one", "three"]
Więc, co jest Array#-
robi?
Również używam Ruby 1.9.2p290. W 1.8.7 wydaje się powodować nieskończoną pętlę.
Spróbuj wywołać go za pomocą 'irb' (!). Po przeczytaniu definicji klasy przechodzi w nieskończoną pętlę. –
@JoshLee Co masz na myśli mówiąc, że wchodzi w nieskończoną pętlę? Podczas wykonywania skryptu wysuwanego bez problemu – Zequez
Drukuje się N == N == N m m m == N == N == m n M == N == l n w kółko ... –