为什么Ruby定义Object#=〜?

在阅读了对 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?

解决方法

因为它允许在匹配表达式中使用任何对象:
Object.new =~ /abc/
=> nil

我想这对于Object.new与regexp / abc /不匹配的方式是有意义的,如果左参数不是String对象,代码会爆炸.所以它通常简化了代码,因为你可以在=〜运算符的左侧有任何对象.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...