2013-03-03 54 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