运算符
运算符是方法
大多数操作符实际上只是方法,因此 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