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