運算子
運算子是方法
大多數操作符實際上只是方法,因此 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 在建立布林表示式(一個評估為 true
或 false
的表示式)時更喜歡字元變體,例如 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