3

case相等运算符的===工作方式如下:

2 === 2  #=> true
2 .=== 2 #=> true

要检查优先级和关联性如何工作,我尝试如下:

2 === 2 === 3
# SyntaxError: (irb):3: syntax error, unexpected tEQQ
# 2 === 2 === 3
#           ^
#        from C:/Ruby193/bin/irb:12:in `<main>'

为什么它返回错误?以下不会引发错误。它如何解决上面的错误?

2 .=== 2 === 3  #=> false
4

1 回答 1

6

Ruby 不知道首先计算哪个表达式,所以它会抛出一个错误。当您使用 显式调用该Integer#===方法时.===,Ruby 会将其视为任何其他方法调用,这意味着它假定右侧的所有内容都是该方法的参数。由于这些可选括号,您实际上是在最后一个示例中编写:

2.===( 2 === 3 )

反过来,这个表达式也没有歧义,因此可以在没有错误的情况下进行评估。

请记住,这不会返回您所期望的;例如:

2.===( 2 === 2 )
#=> false

因为 inner 的返回值2 === 2true. 然后将其进行比较2,并且显然2.===(true)返回false

于 2013-03-03T17:00:11.100 回答