StopIteration 클래스

StopIteration 클래스

반복(iteration)을 멈추게 하기 위해 던져지는 예외가 StopIteration이에요. 특히 Enumerator#next가 값을 다 꺼내고 나서 반복이 끝났음을 알릴 때 이 예외를 사용해요. 그리고 Kernel#loop는 이 예외를 잡아서 루프를 조용히 끝내주죠.

출처: Ruby 4.0 API

본문

반복을 멈추기 위해 발생하며, 특히 Enumerator#next에서 사용돼요. Kernel#loop가 이 예외를 구해줘요(rescue).

loop do
  puts "Hello"
  raise StopIteration
  puts "World"
end
puts "Done!"

produces:

Hello
Done!

loop 안에서 StopIteration이 올라오면 루프가 그냥 끝나고, "World"는 절대 출력되지 않아요. loopStopIteration을 잡아서 정상적으로 종료해 주기 때문이에요.

Public Instance Methods

result → value

반복자(iterator)의 반환값을 돌려줘요.

o = Object.new
def o.each
  yield 1
  yield 2
  yield 3
  100
end

e = o.to_enum

puts e.next                   #=> 1
puts e.next                   #=> 2
puts e.next                   #=> 3

begin
  e.next
rescue StopIteration => ex
  puts ex.result              #=> 100
end

each가 마지막에 반환한 100StopIteration 예외의 result로 전달되는 걸 볼 수 있어요. 반복이 끝난 뒤에도 마지막 반환값을 알고 싶을 때 유용하죠.