Как Array # - (оператор вычитания) сравнивает элементы на предмет равенства?

Когда я вызываю Array # - , это не так кажется, вызывает какой-либо метод сравнения сравниваемых строк:

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}

Он просто возвращает:

["one", "three"]

Итак, что делает Array # - ?

Кроме того, я использую Ruby 1.9 .2p290. В 1.8.7 это вызывает бесконечный цикл.

8
задан Andrew Grimm 19 September 2011 в 23:41
поделиться