Ruby có sự khác biệt giữa các Procs được tạo thông qua Proc.new
và lambda
(hoặc toán tử ->()
trong 1,9). Có vẻ như các Procs không phải lambda sẽ tách một mảng được truyền qua các đối số khối; Procs được tạo thông qua lambda thì không.Sự khác biệt giữa Proc và 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)
Có ai có thông tin chi tiết về động cơ đằng sau hành vi này không?
Bạn có thể đã biết điều này, nhưng điều này hoạt động: 'l = lambda {| (a, b) | a + b}; l [[1,2]] # => 3' – Phrogz