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