예를 들어 보겠습니다.
numbers = [ 3, 1, 4, 1, 5, 9 ]
sum = numbers.inject(0) do |prefix_sum, number|
prefix_sum + number
end
#inject
은 하나의 인수와 블록을 취합니다. 블록은 두 개의 값을 가져와 새로운 값을 반환해야합니다.
위의 예에서 #inject
의 인수는 0
이고 블록은 do |prefix_sum, number| prefix_sum + number end
입니다. 블록에 전달되는 값은 두 |
마커 (prefix_sum
및 number
) 사이에 이름이 지정됩니다.
열거 형 #inject
의 각 값은 두 번째 값으로 차례대로 블록에 전달됩니다. 이 예에서 number
은 3
이고, 그 다음에 1
이고, 그 다음에 4
이고, 그 다음에 1
이고, 그 다음에 5
이고, 마지막으로 9
이 될 것입니다. 따라서이 예에서 블록은 6 번 호출됩니다. numbers
의 각 직위에 한 번
블록 (여기서는 prefix_sum
)에 전달 된 첫 번째 값은 보통 누적 기이라고합니다. 블록이 처음으로 호출 될 때 사용한 값인 #inject
은 #inject
에 전달 된 인수 (이 예제에서는 0
)에 의해 설정됩니다. 블록의 리턴 값은 블록의 다음 호출을위한 누적 기 (prefix_sum
)의 값을 결정합니다.
처리 할 요소가 더 이상없는 경우 누적 기 값이 반환됩니다 (여기서는 sum
에 저장 됨).
그래서 그것을 통해 산책을 할 수 있습니다 :
#inject
는 0
우리의 블록을받습니다.
#inject
는 3
-0
행 prefix_sum
(초기 누산기 값)과 number
(제 배열 값) 결합 당사 블록을 호출한다.
- 저희 블록은
0+3
을 3
으로 계산하여 돌려드립니다.
#inject
는 3
-prefix_sum
(반환 값)과 number
1
행 (두 번째 배열 값)
- 우리 블록
4
3+1
같이 계산 돌려 결합 당사 블록을 호출한다.
#inject
는 4
-prefix_sum
(반환 값)과 number
4
행 (세 번째 배열 값)
- 우리 블록
8
로 4+4
계산 돌려 결합 당사 블록을 호출한다.
#inject
는 8
-prefix_sum
(반환 값)과 number
1
행 (네 번째 배열 값)
- 우리 블록으로
9
8+1
계산 돌려 결합 당사 블록을 호출한다.
#inject
는 9
-prefix_sum
(반환 값)과 number
5
행 (다섯 번째 배열 값)
- 우리 블록으로
14
9+5
계산 돌려 결합 당사 블록을 호출한다.
#inject
는 14
-prefix_sum
(반환 값)과 number
9
행 (여섯 번째 배열 값)
- 우리 블록
23
같은 14+9
계산 돌려 결합 당사 블록을 호출한다.
- 더 이상 배열 요소가 없기 때문에
#inject
은 23
을 반환하고 sum
을 해당 값으로 바인딩합니다.
당신은 caluculating,이 예에서, 항목의 목록에서 작업을 parenthesizing로에서 분사 볼 수 있습니다 :
이것은 당신이 일반적으로 인수 만 한 쌍의에서 작동 모든 작업을 할 수 있습니다
((((((0 + 3) + 1) + 4) + 1) + 5) + 9)
, 그것을 목록에 적용하십시오.
가 특정 예를 들어 당신이 있습니까 ' 설명하는 걸 좋아하니? kjfletch의 답변은 좋은 bt입니다. 질문을 펼치면 사람들이 좀 더 자세한 정보를 제공 할 수 있습니다. – mikej