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

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

中場休息
Dec 16, 2020

||=

在寫上一篇的時候,印象中隱約看到了寫不太對的地方,我應該是鬼遮眼了,但真實想法應該是想先放一邊吧.我錯了,對不起…
現在來講講正確的 ||=

來看看這個用法

a ||= b

然後把這寫法先忘掉,想一下,我們上一篇提到,這一行是要做什麼?

如果a不是 nil或 false的話,那就維持a本來的值,不然就把b的值指定給a

這句話,不用上面的寫法,我應該會直接寫下面這一大串

if a then
a = a
else
a = b
end

「如果a有值的話,那a維持不變,a就是a;否則把b指定給a」
好,這樣滿清楚的,那再用用看符號,看要怎麼寫

# 先寫這樣
a = a || a = b
# 左邊的 a = a 好像有點囉唆,直接寫a吧# 於是變成這樣
a || a = b

OMG! 原來是這樣

原來 a ||= b 其實是 a || a = b 啦!

不過這是我自己的理解和記憶思路啦,我的解釋不一定是對的,相信你從上一篇有看出來了.

上一篇提到 += ,我那時以為只是把符號輪轉位移的寫法,深入研究後,才發現案情不單純.還好我為你踩雷了,不客氣.
有時間的話建議看看下面這幾篇吧.

Reference

建議先看這篇
Day09 — 超級經典面試題: Ruby的 a ||= b (or-equals)是什麼意思呢?
Ting Ting學姊寫的文都好厲害,又完整又打到我們這些初學者的痛點,身為五倍學弟,倍感壓力呀!

Day10: Ruby中的Conditional Assignment Operator: x ||= y(or-equals)
這是另一位五倍學長,整理得也滿完整的.

再來一篇外文的,共同編輯人是Ruby爸爸-松本行弘,這沒問題了吧,設計者自己出來提,這篇舉的例子稍微難看懂,就看看吧.
The Ruby Programming Language by David Flanagan, Yukihiro Matsumoto-Assignments

--

--

中場休息

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