この質問に答える試みで:どうすれば集合の違いを大文字と小文字を区別しないようにすることができますか?、大文字と小文字を区別しない文字列のセットを作成しようとして、セットと文字列を試していました。しかし、何らかの理由でStringクラスを再度開くと、セットに文字列を追加したときにカスタムメソッドが呼び出されません。以下のコードでは出力が表示されませんが、オーバーロードした演算子の少なくとも1つが呼び出されることを期待していました。どうしてこれなの?
編集:ハッシュメソッドなどを定義する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'