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