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

为什么Ruby没有!==运算符?

发布时间:2020-12-17 01:51:08 所属栏目:百科 来源:网络整理
导读:Ruby中的所有相等都是“严格的”,类似于 PHP中的===吗?我注意到Ruby中有一个===运算符,但它做了不同的事情. 解决方法 ===不是一个相等运算符! 不. 但是,它是什么? 您可能熟悉===作为Javascript和PHP中的相等运算符,但这不是Ruby中的相等运算符,并且与其他
Ruby中的所有相等都是“严格的”,类似于 PHP中的===吗?我注意到Ruby中有一个===运算符,但它做了不同的事情.

解决方法

===不是一个相等运算符!

不.

但是,它是什么?

您可能熟悉===作为Javascript和PHP中的相等运算符,但这不是Ruby中的相等运算符,并且与其他语言具有根本不同的语义.

那么===做什么?

===是模式匹配运算符!

> ===匹配正则表达式
> ===检查范围成员资格
> ===检查是否为类的实例
> ===调用lambda表达式
> ===有时检查平等,但大多数情况下都没有

那么这种疯狂是如何有意义的呢?

> Enumerable#grep在内部使用===
>语句在内部使用===的情况

这就是为什么你可以在if语句的情况下使用正则表达式和类和范围甚至lambda表达式.

一些例子

case value
when /regexp/
  # value matches this regexp
when 4..10
  # value is in range
when MyClass
  # value is an instance of class
when ->(value) { ... }
  # lambda expression returns true
when a,b,c
  # value matches one of a,c with `===`
when *array
  # value matches an element in array with `===`
when x
  # values is equal to x unless x is one of the above
end

所有这些示例也使用pattern === value,以及grep方法.

我只能猜测为什么没有!==方法,但是Tadman的直觉似乎很明显,===主要通过case和grep间接使用,因此可能似乎不需要显式的逆运算符.大多数生产代码的样式指南都禁止使用===运算符.

如果您正在寻找其他相等运算符,请检查.eql?和.equal?

(编辑:李大同)

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

    推荐文章
      热点阅读