Or-EqualsConditional 赋值运算符()
Ruby 有一个 or-equals 运算符,当且仅当该变量的计算结果为 nil
或 false
时才允许将值赋给变量。
||= # this is the operator that achieves this.
此运算符使用双管表示或表示分配值的等号。你可能认为它代表了这样的事情:
x = x || y
以上示例不正确。or-equals 运算符实际上代表了这个:
x || x = y
如果 x
评估为 nil
或 false
,则 x
被赋予 y
的值,否则保持不变。
这是 or-equals 运算符的实际用例。想象一下,你有一部分代码需要向用户发送电子邮件。如果因为什么原因没有该用户的电子邮件,你会怎么做?你可能写这样的东西:
if user_email.nil?
user_email = "error@yourapp.com"
end
使用 or-equals 运算符,我们可以删除整个代码块,提供干净,清晰的控制和功能。
user_email ||= "error@yourapp.com"
如果 false
是有效值,必须注意不要意外覆盖它:
has_been_run = false
has_been_run ||= true
#=> true
has_been_run = false
has_been_run = true if has_been_run.nil?
#=> false