Рассматриваемый итератор определен в IndexedSeqLike#Elements
( source ). заявка была недавно подана о несовместимом поведении take
в различных реализациях итераторов.
Чтобы реально использовать N элементов, вызовите Iterator#next
N раз.
Возможно, вы захотите использовать Stream
, который является ленивым (например, Iterator
), но также неизменным (в отличие от Iterator
).
scala> val s = Stream(1, 2, 3)
s: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> s.take(2).toList
res43: List[Int] = List(1, 2)
scala> s.take(2).toList
res44: List[Int] = List(1, 2)
scala> s.drop(2).toList
res45: List[Int] = List(3)
scala> {val (s1, s2) = s.splitAt(2); (s1.toList, s2.toList)}
res46: (List[Int], List[Int]) = (List(1, 2),List(3))