面試題:Proc 與 Lambda 和 block。

Mino chen
CodeForMyself
Published in
Feb 2, 2021

Proc 和 Lambda 都可以把 block 變成物件。 在 ruby的世界裡,到處都是物件,除了 block 。

如果沒有變成物件的話,block 就是一段不能自己執行的程式碼

Proc 把 block 變成物件的方法:
例如: Proc.new { |n| n + 2 },
我們可以幫他加上變數就是 :add_two = Proc.new { |n| n + 2 }
但是 add_two 存的是一組 proc 的值,
如果想要使用被物件化的 block 需要用 call 方法(或是[3], .(3), .===(3))。

例如: add_two.call(3) ⇒ 就會把 3 代入 { |n| n + 2 }
(使用物件化也可以用[3], .(3), .===(3))。

Lambda ( λ ) 像是匿名函式,也可以把 block 物件化,
等於 Proc.new 的效果,像是這樣

lambda { |n| n + 2 },或是這樣寫 → ( n ) { n + 2 }

在 Rails 裡,我們會用到 scope cheap, → { where(“price ≤ 100”) }
箭頭就是 lambda 把 block 物件化。

Proc 和 Lambda 的差別:

使用 Proc.new 到時候呼叫 block 時 add_two.call(1, 2, 3),明明只有一個 n ,但多得引數不會噴錯。

使用 Lambda 到時候呼叫 block 時 add_two.call(1, 2, 3),會噴引數錯誤。

以上就是 Proc、 Lambda 跟 block 之間的關係。

--

--