簡體   English   中英

Proc和Lambda之間的差異

[英]Differences between Proc and Lambda

Ruby在Proc.newlambda (或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之間有兩個主要區別:

  1. 就像方法一樣,lambda從自身返回,而非lambda Proc從封閉方法返回,就像塊一樣。
  2. 就像方法一樣,lambdas有嚴格的參數檢查,而非lambda Proc有松散的參數檢查,就像塊一樣。

或者,簡而言之:lambda表現得像方法,非lambda Proc表現得像塊。

您所看到的是#2的實例。 除了非lambda Proc和lambda之外,還可以嘗試使用塊和方法,你會看到。 (如果沒有這種行為, Hash#each將是一個真正的 PITA,因為它確實產生了一個包含兩個元素的數組,但你幾乎總是希望將它視為兩個參數。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM