试图回答这个问题:如何使设置的差异对大小写不敏感?,我正在试验集合和字符串,试图有一个不区分大小写的字符串集。但是由于某种原因,当我重新打开 String 类时,当我将字符串添加到集合时,我的任何自定义方法都不会被调用。在下面的代码中,我看不到任何输出,但我希望至少有一个我重载的运算符被调用。为什么是这样?
编辑:如果我创建一个自定义类,比如 String2,我在其中定义了一个哈希方法等,当我将对象添加到集合时,这些方法会被调用。为什么不是字符串?
require 'set'
class String
alias :compare_orig :<=>
def <=> v
p '<=>'
downcase.compare_orig v.downcase
end
alias :eql_orig :eql?
def eql? v
p 'eql?'
eql_orig v
end
alias :hash_orig :hash
def hash
p 'hash'
downcase.hash_orig
end
end
Set.new << 'a'