爲什麼下面的表達式解決了它們的做法?括號內的優先級應高於換行符,不是嗎?爲什麼括號內的換行符會改變算術結果?
3 - (1 + 1)
# => 1
3 - (1
+ 1)
# => 2
省略加也讓表達計算爲2
:
3 - (1
1)
# => 2
如果我聲明作爲連續換行符(轉義)或移動加到第一行,期望的行爲實現:
3 - (1 \
+ 1)
# => 1
3 - (1 +
1)
# => 1
爲什麼下面的表達式解決了它們的做法?括號內的優先級應高於換行符,不是嗎?爲什麼括號內的換行符會改變算術結果?
3 - (1 + 1)
# => 1
3 - (1
+ 1)
# => 2
省略加也讓表達計算爲2
:
3 - (1
1)
# => 2
如果我聲明作爲連續換行符(轉義)或移動加到第一行,期望的行爲實現:
3 - (1 \
+ 1)
# => 1
3 - (1 +
1)
# => 1
這是因爲Ruby會將新行識別爲表達式的結尾,除非表達式不完整。例如,
(1
+ 1)
相同
(1;
+1)
其是相同+1
由於返回的括號內的最後一個表達式。這與1
更相似。
如果在行尾有+
,則表達式不完整,因此會繼續到下一行。這使得:
3 - (1 +
1)
被解釋爲3 - (1 + 1)
。
如果你在括號中有代碼,那麼如果你不會用\
結尾,或者用數學運算符開始新行,那麼每行都將作爲分隔代碼的威脅。
所以在你的例子:
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