Ruby syntax reference关于案例陈述:
比较由运营商
完成===
事实上,例如:
ruby -e 'puts (1..3) === 2'
打印true
,但是:
ruby -e 'puts "foo" === /foo/'
打印false
,还有:
ruby -e 'puts :foo === /foo/'
打印false
,但所有这些示例都是case语句的成功条件。它是如何运作的?
答案 0 :(得分:7)
===
运算符不可交换,这意味着"foo" === /foo/
和/foo/ === "foo"
是两个非常不同的东西。 case
语句使用后一种顺序。
事实上,您使用范围的第一个示例已经显示正在使用该订单。 2 === (1..3)
不起作用,就像你的第二个和第三个例子没有。
选择顺序的原因也很明显,至少如果你熟悉Ruby和OO设计中的运算符一般是如何运作的。
===
运算符是一种常规方法,因此编写/foo/ === "foo"
的另一种方式是/foo/.===("foo")
- 这个顺序是有意义的,因为正则表达式确实知道它是否与字符串匹配,但是字符串没有正则表达式的概念,也不知道它是否与一个匹配。扩展到第一个示例,范围确实知道元素是否是其中的一部分,但元素不知道它是否是范围的一部分。