加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Ruby定义Object#=??

发布时间:2020-12-16 19:12:14 所属栏目:百科 来源:网络整理
导读:在阅读了对 another question中的答案的评论并做了一些研究之后,我看到=?在Object上定义,然后被String和Regexp覆盖. String和Regexp的实现似乎假设另一个类: "123" =~ "123" # = TypeError: type mismatch: String given/123/ =~ /123/ # = TypeError: can'
在阅读了对 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对象,代码会爆炸.所以它通常简化了代码,因为你可以在=?运算符的左侧有任何对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读