LoginSignup
2
1

More than 5 years have passed since last update.

String#===の、String#to_str定義時の挙動が微妙な件

Posted at

これを見たときに、

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]

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1