Block 中的 do…end 與 花括號 { } 的差異

Mino chen
CodeForMyself
Published in
Feb 4, 2021

雖然快速面試已經結束,可是從研究面試題裡又更加深了對於 Ruby 和 Rails 的印象,而且重看一次之前的先修教材,已經可以理解到底在做什麼了!!!

太開心了,就像靈魂急轉彎裡說的,目標不是為了達成某個願望,如果是達成了也只是空虛,享受過程永遠是重要的!

因此我們就繼續來探討這些我們常常寫,卻不夠了解的 code 吧!

今天要探討的是龍哥口中擁有扭曲個性的 Block (好可憐,有這種個性也不是他願意的)。

他有點像是 function 連匿名箭頭跟括號都不給他的意思,就是純作用域而已,沒有人有辦法呼叫他,沒有人在意他,就像你的人生(等等我們這邊是正向快樂的部落格)

好的,他的呈現方式有兩種,如同標題所說,第一種就是 do … end ,另一種是大括號{}(或花括號)。

如果想要使用他的話,必須要有人願意讓給他 (yield),但那個就題外話了本篇不是探討 block 。

那麼 do .. end 和 花括號都可以當作 block 那麼差異在哪呢?
有人說如果多行就用 do … end ,單行就用 { },除此之外還有一個重要原因。

各位客官,原來是差在 『結合律』,是的你沒聽錯就是數學那個。

翻成白話文就是,大家都聽過先乘除後加減吧!乘跟除無論如何都是優先計算的,除非遇上括號,所以也可以這麼多記,遇上括號就會比較強,所以花括號比較強(?)

直接結論:括號可以影響優先順序!包括花括號(也是括號麻)

p list.map { |item| item * 2 } 會先執行 list.map { |item| item * 2 } 再執行 p

p list.map do |item| item * 2 end 則會先執行 p list.map 才執行 do |item| item * 2 end,另外後面就不會執行了因為 block 不能單獨執行,而且也沒有人讓他執行。

以上,每天都輸入跟輸出,就可以讓腦袋靈活開開心心囉!讚讚

--

--