Ruby 中 OR 和雙管運算子之間的區別
or
和 ||
在 Ruby 中都是邏輯運算子;由於它們的相似行為,它們可能會令人困惑。它們之間只有細微的差別,在本教程中,我們將瞭解它們有何不同以及應如何使用它們。
要記住的一件重要事情是,如果它們出現在不包含其他運算子的表示式中,它們的行為方式相同。否則,它們的行為會有所不同。
當沒有其他運算子參與時
在此分類中,兩個運算子的行為方式相同,返回第一個真值。
示例程式碼:
nil or 5
2 or 4
輸出:
5
2
示例程式碼:
nil || 5
2 || 4
輸出:
5
2
請注意,在上面的示例中,程式碼採用 expression
而不是 statement
的形式。結合任何可以使它成為陳述的東西都會產生意想不到的結果。
例如,nil or 5
是一個可以傳遞的表示式,可能作為方法的引數或分配給變數,而 puts nil or 5
是一個完整的語句。
測試 Ruby 表示式的最佳方法是使用 interactive Ruby
IRB。它預裝在 macOS 上。要使用 IRB 進行測試,請按照以下步驟操作。
-
開啟一個終端
-
輸入
irb
並按 Enter。這將顯示一個提示 -
輸入你的表示式,例如,
nil || 5
,然後按 Enter -
表示式的結果將顯示在下一行
當涉及其他一些運營商時
在評估以下示例中的程式碼後,我們的重點是 a
的值。
示例程式碼:
a = nil or 5
b = 2 or 4
puts a
puts b
輸出:
nil
2
示例程式碼:
a = nil || 5
b = 2 || 4
puts a
puts b
輸出:
5
2
解釋上述行為的最好方法是檢視 Ruby 運算子優先表。每當一個表示式由多個運算子組成時,就像我們在上面的示例中那樣,我們需要根據它們的優先順序來評估它們。
該表顯示 =
運算子的優先順序高於 or
運算子但低於||
運算子。因此,示例中的評估順序可以分解如下所示。
(a = nil) or 5
(b = 2) or 4
a = (nil || 5)
b = (2 || 4)
雖然我們決定在上面的例子中使用 =
運算子,但我們可以使用任何高於 or
但低於||
的運算子並獲得相同的行為;一個例子是+=
。
示例程式碼:
a = 1
a += 2 || 4 # a += (2 || 4)
puts a
輸出:
3
示例程式碼:
a = 1
a += 2 or 4 # (a += 2) or 4
puts a
輸出:
3
示例程式碼:
a = 1
a += nil || 5 # a += (nil || 5)
puts a
輸出:
6
示例程式碼:
a = 1
a += nil or 5 # (a += nil) or 5
它將丟擲一個 TypeError (nil can't be coerced into Integer)
,因為 Ruby 嘗試首先評估括號中的表示式,將 a
增加 nil
。