왜 그것을입니다 :내 블록이 한 번만 실행되는 이유는 무엇입니까?
array = (1..20).to_a
array.index.each_slice(5) do |slice|
puts slice.inspect
end
반환 :
[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20]
동안 : 만
other_array = []
array = (1..20).to_a
array.index.each_slice(5) do |slice|
puts slice.inspect
other_array.push(1)
end
반환 : other_array.push(1)
휴식 전을 수행하는 방법
[1, 2, 3, 4, 5]
블록의 생태? 분명한 결론은 블록 범위에 속하지 않는 변수에 액세스 할 수 없다는 것입니다.하지만 그 이유는 무엇입니까?
실제로'index'를 호출하는 것이 보이지 않는다. (이것은 배열 푸시가 아닌) – Vasfed
문서에''''index''라고 쓰여있다. "블록이나 인수가 주어지지 않을 때 열거자를 반환합니다."그래서 나는''index''를 호출했습니다. each_slice를 호출 할 수 있도록 열거자를 필요로했지만. 이제는 Array에 Module Enumerable이 포함되어 있으므로 each_slice 메서드 자체가 있습니다. –
이것을 보는 한 가지 방법은'enum1 = array.index # => #; enum2 = enum1.each_slice (5) # => # <열거 자 : # <열거 자 : [1, .. 20] : 색인> : each_slice (5)>'. 이 반환 값을주의 깊게 조사하십시오. 'enum2'를 "복합"열거 자라고 생각하면됩니다. 'enum2'가 생성 한 요소를'enum2.to_a # => [[1, ... 5], ... [16, ... 20]]'배열로 변환하여 볼 수 있습니다. 그리고 나서'enum2.each {| slice | slice.inspect} # => [1, ... 5] ... [16, ... 20]'을 넣습니다. 눈치 챘 겠지만,'.index'가 생략되면 같은 결과를 얻는다. –