gpt4 book ai didi

ruby - 为什么 Ruby 定义 Object#=~?

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:19 33 4
gpt4 key购买 nike

阅读对 another question 中的答案的评论后并做了一些研究,我看到 =~ 是在 Object 上定义的,然后被 StringRegexp 覆盖. StringRegexp 的实现似乎采用了另一个类:

"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#=~,而不是将 =~ 限制为 StringRegexp

最佳答案

因为它允许在匹配表达式中使用任何对象:

Object.new =~ /abc/
=> nil

我想这是有道理的,因为 Object.new 与正则表达式 /abc/ 不匹配,如果左边的参数不匹配,代码就会崩溃一个 String 对象。所以它通常会简化代码,因为您可以在 =~ 运算符的左侧放置任何对象。

关于ruby - 为什么 Ruby 定义 Object#=~?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003244/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com