2014-02-05 3 views
0
triangular_numbers = Enumerator.new do |yielder| 
number = 0 
count = 1 
    loop do 
     number += count 
     count += 1 
     yielder.yield number 
    end 
end 
5.times { print triangular_numbers.next, " " } 
puts 

나는 당신이 전에 이것에 대해 모든 질문에 답했다는 것을 알고 있습니다. 내가 바로 yielder 아마 해시 또는 배열하는 매개 변수입니다 무슨 말triangular_numbers 열거 자 수령자 수율

오전에 진행에 대한 자세한 내용을 이해하려고 노력하고

yielder.yield 번호은 기본적으로 어떤 수를 추진하고있다 그 배열에 있습니다.

나는 사람들이 야수 < <을 사용하는 것을 보았습니다. yielder.push (number)도 사용할 수 있다고 가정합니다. 똑같은 일을 할 것입니다.

다른 이유는 무엇입니까 은 그 가치를 유지하고 있습니다.

답변

0

아니요 데이터 구조가 아닙니다. 그것은 객체입니다 - Enumerator::Yielder의 인스턴스를 클릭하면 링크가 잘 보일 것입니다. 그것은 C로 작성되었으며 유일한 메소드는 yield이고 별명은 <<입니다. 루비 코어를 처리하려면 루비 코어에 두어야합니다.

본질적이다

필요에 따라 열거로부터 아이템을 취득 할 EnumeratorEnumerable 및 방법에 의해 내부적으로 사용되는 파이프 를 좋아한다. 예를 들어 Enumerator#next은 시퀀스에서 다음 항목을 가져옵니다. Enumerable에서 사용할 수있는 방법은 훨씬 더 포괄적이며 Enumerator에서 제공하는 기본 작업을 기반으로합니다.