Ruby和Rails中的 ||= 和+= part1

當你看到,覺得有印象,卻想不起來那是什麼

中場休息
1 min readNov 27, 2020

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)的優先順序 “ && “ , “ == “ , “ || “ 符號

--

--

中場休息

休息是為了走更長遠的路,把簡單的成長養成一種放鬆習慣,那豈不一舉兩得?