Ruby和Rails中的 ||= 和+= part2
||=
在寫上一篇的時候,印象中隱約看到了寫不太對的地方,我應該是鬼遮眼了,但真實想法應該是想先放一邊吧.我錯了,對不起…
現在來講講正確的 ||=
來看看這個用法
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