[英]Differences between Proc and Lambda
Ruby在Proc.new
和lambda
(或1.9中的->()
運算符)創建的Proc.new
之間存在差異。 似乎非lambda Procs將在一個塊參數中傳遞一個數組。 通過lambda創建的過程不會。
p = Proc.new { |a,b| a + b}
p[[1,2]] # => 3
l = lambda { |a,b| a + b }
l[[1,2]] # => ArgumentError: wrong number of arguments (1 for 2)
有沒有人對這種行為背后的動機有任何見解?
lambdas和非lambda Proc
之間有兩個主要區別:
Proc
從封閉方法返回,就像塊一樣。 Proc
有松散的參數檢查,就像塊一樣。 或者,簡而言之:lambda表現得像方法,非lambda Proc
表現得像塊。
您所看到的是#2的實例。 除了非lambda Proc
和lambda之外,還可以嘗試使用塊和方法,你會看到。 (如果沒有這種行為, Hash#each
將是一個真正的 PITA,因為它確實產生了一個包含兩個元素的數組,但你幾乎總是希望將它視為兩個參數。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.