面試題:Proc 與 Lambda 和 block。
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 之間的關係。