これを見たときに、
class A
def to_str
end
def === pair
true
end
end
p("" === A.new)
このコードの実行結果を予想してみてください。
多分trueになると思うじゃないですか!
実はこのコード、falseが出力されます!
本当にtrueになるのは、
class A
def to_str
end
def == pair # === から == に変わったよ!
true
end
end
p("" === A.new)
こんなコードになります。
この挙動だと、case句では簡潔に書きたいけど、==で直接評価する程でもないようなオブジェクトを作ったときに困る気がします。(困ってます)
ちなみに英語版ではもっとはっきりと書かれています。
https://docs.ruby-lang.org/en/2.5.0/String.html#method-i-3D-3D-3D
そんな変な挙動のお話でした。
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]