수색…


소개

Enumerator 는 제어 된 방식으로 반복을 구현하는 개체입니다.

개체는 조건이 충족 될 때까지 반복하는 대신 필요에 따라 값을 열거 합니다. 루프의 실행은 객체 소유자가 다음 값을 요청할 때까지 일시 중지됩니다.

열거자는 값의 무한한 흐름을 가능하게합니다.

매개 변수

매개 변수 세부
yield << 로 별명이 지정된 yield 응답합니다. 이 객체에 대한 항복은 반복을 구현합니다.

사용자 지정 열거 자

피보나치 수에 대한 Enumerator 자를 만듭니다.

fibonacci = Enumerator.new do |yielder|
  a = b = 1
  loop do
    yielder << a
    a, b = b, a + b
  end
end

이제 fibonacci 와 함께 Enumerable 메서드를 사용할 수 있습니다.

fibonacci.take 10
# => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

기존 방법

each 블록과 같은 반복 메서드가 블록없이 호출되면 Enumerator 반환되어야합니다.

이것은 enum_for 메소드를 사용하여 수행 할 수 있습니다.

def each
  return enum_for :each unless block_given?

  yield :x
  yield :y
  yield :z
end

프로그래머는 Enumerable 연산을 작성할 수 있습니다.

each.drop(2).map(&:upcase).first
# => :Z

되감기

rewind 를 사용하여 열거자를 다시 시작하십시오.

ℕ = Enumerator.new do |yielder|
  x = 0
  loop do
    yielder << x
    x += 1
  end
end

ℕ.next
# => 0

ℕ.next
# => 1

ℕ.next
# => 2

ℕ.rewind

ℕ.next
# => 0


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow