【发布时间】:2011-11-20 14:37:47
【问题描述】:
当我调用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 中似乎会导致无限循环。
【问题讨论】:
-
尝试使用
irb(!) 调用它。阅读您的类定义后,它会进入无限循环。 -
@JoshLee 进入无限循环是什么意思?当我执行脚本时,它会毫无问题地退出
-
它一遍又一遍地打印出 N == N N == m m == m N == n m == n M == n l == n…
-
有趣的问题。
['one', 'two', 'three'].delete('two')使用==。你忘记了equal?,但不是搜索到的那个。 -
@JoshLee 至少不在我的电脑里,我正在使用 ruby 1.9.2p290
标签: ruby arrays operator-overloading subtraction comparison-operators