在阅读了对
another question中的答案的评论并做了一些研究之后,我看到=〜在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?