[英]Why parentheses change returning value?
我正在學習紅寶石,並且陷入了可能的簡單問題。 有代碼:
str = 'abc'
a = 1
b = 2
a = str.reverse if str.size > 3
b = (str.reverse if str.size > 3)
p a
p b
輸出:
1
nil
有人能告訴我這些括號會改變返回值嗎?
這是代碼的“塊”嗎?
他們是兩個不同的陳述。
第一個是條件賦值:
a = str.reverse if str.size > 3
if
適用於整行。 如果str.size
不大於3,則絕對不會發生任何事情。 a
根本不動。 您也可以這樣寫:
if str.size > 3 then
a = str.reverse
end
能夠將if
貼在最后只是使您可以一行而不是一塊地完成操作。
第二個是條件值的分配。
b = (str.reverse if str.size > 3)
在這種情況下,無論如何b
的值都將始終更改; 價值str.size
只是確定它是什么改變 。 您還可以在此處使用if
的塊形式:
b = if str.size > 3 then
str.reverse
end
重要的區別是對b
的賦值發生在if
之外,因此它不是有條件的。 它總是發生。
括號不會創建塊,但它們會確定優先級。 只要您有一條語句可以根據事情發生的順序以多種方式解釋,那么實際發生的事情將由優先規則決定。 例如,標准算術規則告訴我們這是正確的:
3 + 2 × 4 = 11
答案不是20,因為乘法優先於加法。 括號使您可以更改它; 以上相當於
3 + (2 × 4) = 11
如果您希望答案為20,則可以這樣寫:
(3 + 2) × 4 = 20
Ruby也是如此。 不帶括號,第一行等效於此帶括號的版本:
(a = str.reverse) if str.size > 3
這清楚表明分配是條件保護的對象,而不僅僅是分配的值。
括號將在操作期間更改優先級。 括號之間的代碼由於其作為條件表達式的狀態而將被評估為布爾值。 就像@Mark Reed所說的,有不同的陳述。 您可以根據自己的意願選擇正確的方式。 希望能有所幫助。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.