运算符

运算符是方法

大多数操作符实际上只是方法,因此 x + y 使用参数 y 调用 x+方法,这将被写为 x.+(y)。如果你编写自己的方法具有给定运算符的语义含义,则可以在类中实现你的变体。

作为一个愚蠢的例子:

# A class that lets you operate on numbers by name.
class NamedInteger
  name_to_value = { 'one' => 1, 'two' => 2, ... }

  # define the plus method
  def + (left_addend, right_addend)
    name_to_value(left_addend) + name_to_value(right_addend)
  end

  ...
end

何时使用 &&and||对比 or

请注意,有两种表达布尔值的方式,&&and,以及||or - 它们通常可以互换,但并非总是如此。我们将这些称为字符变体。

字符变体具有更高的*优先级,*因此在更复杂的语句中减少括号的需要有助于避免意外错误。

单词变体最初用作控制流操作符而不是布尔运算符。也就是说,它们被设计用于链式方法语句:

raise 'an error' and return

虽然它们可以用作布尔运算符,但它们的优先级较低会使它们变得不可预测。

其次,许多 rubyists 在创建布尔表达式(一个评估为 truefalse 的表达式)时更喜欢字符变体,例如 x.nil? || x.empty?。另一方面,在评估一系列方法的情况下,优选单词变体,并且可能会失败。例如,对于在失败时返回 nil 的方法使用单词 variant 的常见习语可能如下所示:

def deliver_email
  # If the first fails, try the backup, and if that works, all good
  deliver_by_primary or deliver_by_backup and return
  # error handling code
end