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

我最近看到它使用过几次,但无法弄清楚它的作用。谁能说明它的工作原理?



呼啦一阵风
浏览 631回答 3
3回答

手掌心

就像Ruby中的所有其他方法一样(实际上几乎是任何面向对象的语言),a === b表示a的课程作者想要表达的意思。但是,如果你不想混淆最烦你的同事,该公约是===为案件包容操作。基本上,它是一个布尔运算符,它问一个问题:“ 如果我有一个标有抽屉的抽屉a,放入b那个抽屉有意义吗? ”另一种说法是“ 如果a描述一个集合,将b成为该集合的成员吗? ”例如: (1..5) === 3           # => true (1..5) === 6           # => falseInteger === 42          # => trueInteger === 'fourtytwo' # => false  /ell/ === 'Hello'     # => true  /ell/ === 'Foobar'    # => false===运算符的主要用法是在case表达式中,因为case foowhen bar  bazwhen quux  flurbelse  blarfend被翻译成(大致)类似_temp = fooif bar === _temp  bazelsif quux === _temp  flurbelse  blarfend请注意,如果要搜索此运算符,通常将其称为三等号运算符或threequals运算符或大小写相等运算符。我真的不喜欢这些名称,因为此运算符与相等绝对无关。特别是,人们期望平等是对称的:如果a等于b,那么b最好也等于a。同样,人们希望平等可以传递:if a == b和b == cthen a == c。尽管没有办法真正保证使用像Ruby这样的单调度语言,但是您至少应该努力保留此属性(例如,遵循coerce协议)。但是,因为===没有对对称性或传递性的期望。事实上,它是由设计非常不对称。这就是为什么我不喜欢称呼它与远程平等相似的东西。这也是我认为的原因,应该将其称为其他名称~~~或类似名称。

神不在的星期二

在Ruby中,===运算符用于测试语句when子句中的相等性case。在其他语言中,以上是正确的。据我所知,Ruby没有真正的运算符,它们都是在表达式的LHS上调用的方法,并传入表达式的RHS。因此,实际上,您可以覆盖类中想要的任何“运算符”,以执行所需的任何内容(类似于C ++中的运算符重载)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby