Or-EqualsConditional 赋值运算符()

Ruby 有一个 or-equals 运算符,当且仅当该变量的计算结果为 nilfalse 时才允许将值赋给变量。

 ||= # this is the operator that achieves this. 

此运算符使用双管表示或表示分配值的等号。你可能认为它代表了这样的事情:

 x = x || y

以上示例不正确。or-equals 运算符实际上代表了这个:

 x || x = y

如果 x 评估为 nilfalse,则 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