Possible Duplicate: === vs. == in Ruby
I've seen it used a few times lately but can't figure out what it does. Can anyone illustrate how it works?
在 Ruby 中,===操作符用于测试 case语句的 when子句内的相等性。在其他语言中,上述观点是正确的。
===
case
when
据我所知,Ruby 没有 真正的操作者,它们都是 方法,在表达式的 LHS 上调用,传递表达式的 RHS。 所以,实际上,你可以在你的类中覆盖任何你想要的“操作符”来执行任何你想要的操作(类似于 C + + 中的运算符重载)。
感谢您的编辑雅各布,我正要叫你出来;)我会张贴一对夫妇的例子无论如何。= = 的实现根据类型的不同而不同。例如:
(1...3) === 2 => true /test/ === "this is a test" => true case 'test' when /blah/ "Blach" when /test/ "Test" else "Fail" end => "Test"
斯蒂芬,检查 http://ruby-doc.org/docs/ProgrammingRuby/(“镐”) ,它应该能够帮助你出这样的问题在未来。
就像 Ruby 中的其他方法(或者实际上几乎所有面向对象语言)一样,
a === b
意味着 a类的作者希望它是什么意思。
a
但是,如果您不想让您的同事感到困惑,惯例是 ===是 个案包括情况操作符。基本上,它是一个布尔运算符,问问题“ 如果我有一个标有 ABC1的抽屉,把 b放在那个抽屉里有意义吗?”
b
另一种配方是“ 如果 ABC0描述了一个集合,那么 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
注意,如果要搜索这个操作符,它通常被称为 三重等于运算符或 三等运算符或 大小写相等运算符。我真的不喜欢这些名字,因为这个运算符和等式完全没有任何关系。
特别是,我们希望等式是对称的: 如果 a等于 b,那么 b最好也等于 a。另外,我们可以期望等式是可传递的: 如果 a == b和 b == c,那么 a == c。虽然在像 Ruby 这样的单分派语言中,实际上没有办法实现 保证,但是您至少应该努力保留这个属性(例如,通过遵循 coerce协议)。
a == b
b == c
a == c
coerce
然而,对于 ===来说,不存在对称性或传递性的期望。事实上,它很大程度上是通过设计 没有对称的。这就是为什么我不喜欢称它为甚至 远程控制类似于等式的任何东西。这也是为什么我认为,它应该被称为像 ~~~或什么别的东西。
~~~