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

ruby – Integer === 3如何工作?

发布时间:2020-12-17 03:51:12 所属栏目:百科 来源:网络整理
导读:据我了解,===运算符测试以查看RHS对象是否是LHS对象的成员.那讲得通.但是这在 Ruby中是如何工作的?我正在查看Ruby文档,我只看到在Object中定义的===,我在Integer本身看不到它.它没有记录吗? 解决方法 Integer是一个类,它(至少在Ruby中)意味着它只是一个无
据我了解,===运算符测试以查看RHS对象是否是LHS对象的成员.那讲得通.但是这在 Ruby中是如何工作的?我正在查看Ruby文档,我只看到在Object中定义的===,我在Integer本身看不到它.它没有记录吗?

解决方法

Integer是一个类,它(至少在Ruby中)意味着它只是一个无聊的旧普通对象,就像任何其他对象一样,恰好是Class类的一个实例(而不是像Object或String或MyWhateverFoo) .

反过来,类是Module的子类(虽然它可能不应该,因为它违反了Liskov Substition Principle,但这是对另一个论坛的讨论,也是一个已经被打过很多次的死马).在Module#===中,你会找到你正在寻找的定义,哪个Class继承自Module和Class的实例(如Integer).

模块#===基本上与Object#kind_of?对称定义,如果其参数是其自身的实例,则返回true.所以,3是Integer的一个实例,因此Integer === 3返回true,就像3.kind_of?(整数)一样.

So as I understand it,the === operator tests to see if the RHS object is a member of the LHS object.

不必要. ===是一种方法,就像任何其他方法一样.它做我想做的任何事情.在某些情况下,“是”成员的类比分解.在这种情况下,它已经很难吞下去了.如果你是一个硬核类型理论狂,那么将一个类型视为一个集合,并将该类型的实例视为集合的成员是完全自然的.当然对于Array和Hash来说,“成员”的定义也是显而易见的.

但是Regexp呢?再说一次,如果你是正式的语言buff并且知道你的乔姆斯基倒退,那么将正则表达式解释为无限的单词和字符串作为该集合的成员感觉完全自然,但如果没有,那么它听起来有点奇怪.

到目前为止,我没有想出一个关于===意味着什么的简明描述.事实上,我甚至没有为它提出一个好名字.它通常被称为三重等于运算符,三元运算符或大小写等于运算符,但我强烈不喜欢这些名称,因为它与平等完全无关.

那么,它做了什么?我想出的最好的是:想象你正在制作一个表,其中一个列标题是Integer.在该专栏中写3是否有意义?如果其中一个列标题是/ ab * a /,那么在该列中写入“abbbba”是否有意义?

基于该定义,它可以被称为包含运算符,但这比其他例子更糟糕……

(编辑:李大同)

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

    推荐文章
      热点阅读