2016-06-30 2 views
0

내장 메서드를 사용하여 목록을 반복기로 변환 할 때 문제가 있습니다.스칼라 : List.iterator가 빈 반복자를 생성합니다.

  1. iterator.hasNext을 호출하면 iterator.size의 값이 변경됩니다.
  2. iterator.hasNext == false 전에는 반복이 발생하지 않았습니다.

이러한 문제의 원인은 무엇입니까?

val list = scala.collection.immutable.List(1, 2, 3) 
val iterator = list.iterator 
println(iterator.size) // 3 
println(iterator.hasNext) // false 
println(iterator.size) // 0 

Scala 버전 2.11.4 (OpenJDK 64 비트 서버 VM, Java 1.8.0_72)에서 로컬로 확인되었습니다.

IdeOne에서 확인했습니다. here.

+4

Iterator docs API에서 : "달리 명시하지 않는 한, 메소드를 호출 한 후에 반복자를 사용해서는 안된다는 점에 유의하는 것이 특히 중요합니다." 여기에는'size' 메쏘드가 포함됩니다. – Brian

답변

5

반복기의 크기를 계산하면 크기가 저장되지 않으므로 소비합니다. API (즉, 반복자의 크기를 제공함)가 오도 된 경우에도 의도 한대로 작동한다고 생각합니다.

+1

"먹어라"는 뜻은 무엇입니까? –

+1

좋은 캐치는 오해의 소지가있는 "악의"버전을 표현하고 싶었습니다. 용어는 내가 의미하는 바를 표현한다고 생각하지만 그렇지 않습니다. – uberwach

+1

나는 "삼키다"라는 단어 선택을 승인한다. 나는이 쿼크를 나 자신 (오늘은 실제로)이라고 발견했을 때 나는 조금 peaved했다. –

관련 문제