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
答案 0 :(得分:6)
Ruby不知道首先要评估哪个表达式,因此会抛出错误。当您使用Integer#===
显式调用.===
方法时,Ruby会将此视为任何其他方法调用,这意味着它假定右侧的所有内容都是该方法的参数。由于这些可选括号,您实际上是在上一个例子中写的:
2.===( 2 === 3 )
这个表达式反过来并不含糊,因此可以毫无错误地进行评估。
请记住,这不会返回您的预期;例如:
2.===( 2 === 2 )
#=> false
因为内部2 === 2
的返回值为true
。然后将其与2
进行比较,显然2.===(true)
会返回false
。