2016-02-29 49 views
6

爲什麼下面的表達式解決了它們的做法?括號內的優先級應高於換行符,不是嗎?爲什麼括號內的換行符會改變算術結果?

3 - (1 + 1) 
# => 1 

3 - (1 
    + 1) 
# => 2 

省略加也讓表達計算爲2

3 - (1 
     1) 
# => 2 

如果我聲明作爲連續換行符(轉義)或移動加到第一行,期望的行爲實現:

3 - (1 \ 
    + 1) 
# => 1 

3 - (1 + 
     1) 
# => 1 

回答

5

這是因爲Ruby會將新行識別爲表達式的結尾,除非表達式不完整。例如,

(1 
+ 1) 

相同

(1; 
+1) 

其是相同+1由於返回的括號內的最後一個表達式。這與1更相似。

如果在行尾有+,則表達式不完整,因此會繼續到下一行。這使得:

3 - (1 + 
     1) 

被解釋爲3 - (1 + 1)

2

如果你在括號中有代碼,那麼如果你不會用\結尾,或者用數學運算符開始新行,那麼每行都將作爲分隔代碼的威脅。

所以在你的例子:

def plus_minus_if_you_understand_this_the_problem_is_solved_i_guess 
    3 - (1 
     1) 
end 

意味着我有數量3並希望在括號中減去表達。在括號我行#1號1和#2線人數1一次,因爲它是表達的最後一行它是由紅寶石重新調整(如在def最後一項則返回end之前這樣:

(3 # doing nothing 
    1) # returns 1 

而且再次,這部分代碼返回2,因爲它是括號中的最後一項:

(puts "hello!" 
    2) => 2 
相關問題