2011-11-27 13 views
7

Miałem dość dużą listę liczb. Musiałem nałożyć na nich jakąś operację, a następnie wziąć tylko te wyniki, które spełniają pewien warunek. Lista jest sekwencyjna, więc gdy znajdę numer, który nie spełnia warunku, mogę przestać szukać.Dziwny wyjątek podczas korzystania z .view na liście

Chciałem uniknąć robi zbyt wiele obliczeń, więc przeniósł się jak w poniższym przykładzie:

List(1,2,3,4,5).view.map(2 *).takeWhile(_ < 8) 

Ale to daje mi wyjątek:

java.lang.UnsupportedOperationException: SeqViewM(...).newBuilder 
at scala.collection.TraversableViewLike$class.newBuilder(TraversableViewLike.scala:69) 
at scala.collection.SeqViewLike$$anon$3.newBuilder(SeqViewLike.scala:77) 
at scala.collection.IterableLike$class.takeWhile(IterableLike.scala:139) 
at scala.collection.SeqViewLike$$anon$3.takeWhile(SeqViewLike.scala:77) 
at scala.collection.SeqViewLike$$anon$3.takeWhile(SeqViewLike.scala:77) 

Korzystanie Scala 2.9.0.1 (tak samo zachowanie z 2.9.1). Co jest nie tak?

+0

Działa dobrze z 2.8 –

Odpowiedz

5

Wygląda jak błąd. (To zgłosić, jeśli nie jest już zgłoszone i/lub stałe!)

W międzyczasie można użyć iterator jako obejście dla tego konkretnego kodu:

List(1,2,3,4,5).iterator.map(2 *).takeWhile(8 >).toList 

(upuść .toList jeśli ciebie "chętnie skończy się iteratorem).

Powiązane problemy