2014-07-01 2 views
1

내가 뭔가 작동이의 차이 : + 및 +

list << num if num.to_s.split("").map(&:to_i).map(&:factorial).inject(:+) == num 

과 같은 코드를 가지고, 내가 궁금해서 어떻게 :+ 앞에 & (앰퍼샌드)없이 inject 작품. 나는 차이점을 :+&:+ 사이에 설명 할 사람을 물어볼 것입니다.

+1

그들 중 하나가 모자를 쓰고 있습니까? ... 미안하지만, 저항 할 수 없었다 – musefan

+2

@musefan 아니, 그들 중 하나에는 털이있다. – sawa

답변

5

는 proc로 변환되는 반면, :+은 기호입니다. 발동 내부적으로 번역되는 심볼들을 수신 inject 지원 :

는 블록을 지정하면

이 후 열거의 각 요소에 대한 블록 되고 누산기 값 (메모) 상기 요소를 통과했다. 기호를 대신 지정하면 컬렉션의 각 요소는 메모 메서드로 전달됩니다 (). 두 경우 모두 결과는 메모의 새 값이됩니다. 반복이 끝나면 메모 의 최종 값이 메서드의 반환 값이됩니다.