문제

나는 종종 사전 구성된 람다를 '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 트릭 외부는 람다 ​​객체가 아닌 블록을 메서드에 전달하는 경우에만 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top