Ruby 中 OR 和雙管運算子之間的區別

Nurudeen Ibrahim 2022年5月18日
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

相關文章 - Ruby Operator