为了账号安全,请及时绑定邮箱和手机立即绑定

“ ===”运算符在Ruby中做什么?

“ ===”运算符在Ruby中做什么?

呼啦一阵风 2019-10-06 14:47:53
我最近看到它使用过几次,但无法弄清楚它的作用。谁能说明它的工作原理?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

就像Ruby中的所有其他方法一样(实际上几乎是任何面向对象的语言),


a === b

表示a的课程作者想要表达的意思。


但是,如果你不想混淆最烦你的同事,该公约是===为案件包容操作。基本上,它是一个布尔运算符,它问一个问题:“ 如果我有一个标有抽屉的抽屉a,放入b那个抽屉有意义吗? ”


另一种说法是“ 如果a描述一个集合,将b成为该集合的成员吗? ”


例如:


 (1..5) === 3           # => true

 (1..5) === 6           # => false


Integer === 42          # => true

Integer === 'fourtytwo' # => false


  /ell/ === 'Hello'     # => true

  /ell/ === 'Foobar'    # => false

===运算符的主要用法是在case表达式中,因为


case foo

when bar

  baz

when quux

  flurb

else

  blarf

end

被翻译成(大致)类似


_temp = foo


if bar === _temp

  baz

elsif quux === _temp

  flurb

else

  blarf

end

请注意,如果要搜索此运算符,通常将其称为三等号运算符或threequals运算符或大小写相等运算符。我真的不喜欢这些名称,因为此运算符与相等绝对无关。


特别是,人们期望平等是对称的:如果a等于b,那么b最好也等于a。同样,人们希望平等可以传递:if a == b和b == cthen a == c。尽管没有办法真正保证使用像Ruby这样的单调度语言,但是您至少应该努力保留此属性(例如,遵循coerce协议)。


但是,因为===没有对对称性或传递性的期望。事实上,它是由设计非常不对称。这就是为什么我不喜欢称呼它与远程平等相似的东西。这也是我认为的原因,应该将其称为其他名称~~~或类似名称。


查看完整回答
反对 回复 2019-10-06
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

在Ruby中,===运算符用于测试语句when子句中的相等性case。在其他语言中,以上是正确的。

据我所知,Ruby没有真正的运算符,它们都是在表达式的LHS上调用的方法,并传入表达式的RHS。因此,实际上,您可以覆盖类中想要的任何“运算符”,以执行所需的任何内容(类似于C ++中的运算符重载)。


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 584 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信