Ruby和Rails中的 ||= 和+= part1
Ruby裡的 ||= 和 +=
在學先修課程Ruby時,看到了+=
,這裡簡短舉例說明一下
a = a +1
# 把a+1指定給a
也可以寫成
a += 1
在寫法上,就是把 =
右邊的 a
搬到左邊,然後把 +
和 =
倒裝放。
而關於 ||=
的簡短解釋如下
如果a不是 nil或 false(有賦值),那就維持a本來的值,不然就把1設定為a的值
下面用連續一字線上下包起來的是錯誤示範,但我想我應該不是第一個踩雷的,所以還是留著這個錯誤。
— — — — — — — — — — — — — — — — — — — —
a = a || 1
# 這是錯的解釋,你要是忽略我的警告,學到錯的,我也沒辦法了
— — — — — — — — — — — — — — — — — — — —
至於正確的 ||=
是什麼? 我打算另外寫一篇
上課看到 ||=
這符號時,我呈現已忘記的狀態。
老實說,在Ruby的先修對 ||=
沒太多印象,可能是因為我做題目和練習太少,只有碰到+=
。先承認,因為以後還是要面對問題。
當實體課程開始,上到Rails中段,這個 ||=
忽然冒出來,所以有了這篇文章。
Rails裡的 ||= 和 +=
進到Rails以後,有了內建的 increment 方法可以使用,功能和 +=
似乎滿像的,還沒深入去了解。而課程到目前做到會員功能,還沒碰到 +=
。
不過 ||=
已經出現了,來看看下面這段
module SessionsHelper
def current_user
if session[:user9527].present?
@user ||= User.find_by(email: session[:user9527])
else
nil
end
end
end
這邊是在做會員是否有session的確認,我們看到第4行
@user ||= User.find_by(email: session[:user9527])
意思就是說,如果 @user
已經有指定某筆user資料,那就維持原本指定的,否則就用 User.find_by(email: session[:9527])
找一筆user資料給 @user
。
對了,Javascript裡似乎也有這種 +=
和 ||=
的用法。
Reference
Day09 — 超級經典面試題: Ruby的 a ||= b (or-equals)是什麼意思呢?
Ruby (Rails) 內運算式 (Operator)的優先順序 “ && “ , “ == “ , “ || “ 符號