루비: proc 및 람다

2918 단어 ruby

예시




hash = {foo: :bar}
nested_array = [[1, 2]]
proc_printer = Proc.new {|a, b| puts "a: #{a}, b: #{b}" }
lambda_printer = lambda {|a, b| puts "a: #{a}, b: #{b}" }

hash.each(&proc_printer) # => a: foo, b: bar
nested_array.each(&proc_printer) # => a: 1, b: 2
hash.each(&lambda_printer) # => a: foo, b: bar
nested_array.each(&lambda_printer) # => wrong number of arguments (given 1, expected 2) (ArgumentError)


무슨 일이에요?



Alambda는 aproc와 다르게 인수를 취합니다. 이 경우 중첩된 배열의 경우 배열은 proc 가 있는 두 개의 인수로 "추출"되는 반면 lambda 가 있는 하나의 배열로 전달됩니다.
Proc 는 블록처럼 동작하고 lambda 는 메서드처럼 동작합니다. 일반적으로 블록과 함께 사용되는 each 와 같은 메서드와 함께 사용할 때 proc 대신 lambda 를 사용하는 것이 좋습니다.

좋은 웹페이지 즐겨찾기