iter()는 준비만 하고, 소비자가 값을 당길 때 진행한다

반복자를 만든 순간에는 원소를 처리하지 않는다. next()for가 요청할 때 내부 위치가 한 칸씩 움직인다.

1 · SOURCE

원본 시퀀스

vec![1, 2, 3]

아직 순회 상태는 없다.

2 · CREATE

반복자 생성

let it = v1.iter();

위치만 준비한다. 처리한 원소는 0개다.

3 · CONSUME

소비자가 요청

next() · for val in it

요청마다 상태가 변하고 다음 원소를 꺼낸다.

4 · OUTPUT

끝까지 한 번씩

Some(&1) Some(&2) Some(&3) None

None이 시퀀스의 종료를 알린다.

생성과 실행의 경계를 기억하자: 반복자는 시퀀스를 복사하지 않고, 소비될 때 필요한 원소만 순서대로 내놓는다.