为什么Ruby定义Object#=〜?

前端之家收集整理的这篇文章主要介绍了为什么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对象,代码会爆炸.所以它通常简化了代码,因为你可以在=〜运算符的左侧有任何对象.

猜你在找的Ruby相关文章