Ruby에서 람다와 함께 사용되는 주입 동작 이해
문제
나는 종종 사전 구성된 람다를 'map', 'select' 등과 같은 열거 가능한 메서드에 연결합니다.하지만 '주입'의 동작은 다른 것 같습니다.예를 들어~와 함께
mult4 = lambda {|item| item * 4 }
그 다음에
(5..10).map &mult4
나에게 준다
[20, 24, 28, 32, 36, 40]
하지만 이렇게 주입에 사용하기 위해 2-매개변수 람다를 만든다면,
multL = lambda {|product, n| product * n }
나는 말할 수 있기를 원한다
(5..10).inject(2) &multL
'inject'에는 선택 사항이 있으므로 하나의 초기 값에 대한 매개 변수이지만 그게 나에게 ...
irb(main):027:0> (5..10).inject(2) &multL
LocalJumpError: no block given
from (irb):27:in `inject'
from (irb):27
그러나 '&multL'을 두번째 매개변수를 삽입하면 작동합니다.
irb(main):028:0> (5..10).inject(2, &multL)
=> 302400
내 질문은 "왜 이전 시도가 작동하지 않고 작동합니까?"입니다.
해결책
그래서 그 이유는
(5..10).map &mult4
작품과
(5..10).inject(2) &multL
첫 번째 경우에는 Ruby Parens가 암시적이라는 것이 아니므로 실제로는 다음을 의미합니다.
(5..10).map(&mult4)
원한다면 두 번째 경우에 사용할 수 있습니다.
(5..10).inject 2, &multL
Parens 트릭 외부는 람다 객체가 아닌 블록을 메서드에 전달하는 경우에만 작동합니다.
제휴하지 않습니다 StackOverflow