別の質問の回答へのコメントを読んで少し調べたところ、=~が で定義されObject、 でオーバーライドされStringていることがわかりましたRegexp。との実装は、他のクラスを想定しているようですString。Regexp
"123" =~ "123" # => TypeError: type mismatch: String given
/123/ =~ /123/ # => TypeError: can't convert Regexp to String
=~は に対して定義されていますがObject、 で+はありません:
Object.new =~ 1 # => nil
Object.new + 1 # => undefined method `+' for #<Object:0x556d38>
とに限定するObject#=~のではなく、 が定義されているのはなぜですか?=~StringRegexp