簡體   English   中英

為什么括號會改變返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM