2013-03-03 74 views
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 
+1

@sawa感谢您的编辑。 – 2013-03-03 18:08:24

回答

6

Ruby不知道首先评估哪个表达式,因此会引发错误。当你用.===明确地调用Integer#===方法时,Ruby会将其视为任何其他方法调用,这意味着它假设右侧的所有内容都是该方法的参数。由于这些可选圆括号,你实际上是写在你的最后一个例子:

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

反过来这种表达一点也不含糊,因此可以无差错进行评估。

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

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

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

+0

'+ 1'给你。你可以发起聊天吗?我有话要问你。如果你不介意 – 2013-03-03 17:10:15

+0

与我联系http://chat.stackoverflow.com/rooms/25471/15187998 – 2013-03-03 17:18:06