別の質問の回答へのコメントを読んで少し調べたところ、=~
が で定義され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#=~
のではなく、 が定義されているのはなぜですか?=~
String
Regexp