運算子

運算子是方法

大多數操作符實際上只是方法,因此 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