Странное исключение при использовании .view в списке - PullRequest
7 голосов
/ 27 ноября 2011

У меня был довольно большой список чисел. Мне нужно было применить к ним некоторые операции, а затем взять только те результаты, которые удовлетворяют некоторому условию Список является последовательным, поэтому, как только я найду число, которое не удовлетворяет условию, я перестану искать.

Я хотел избежать слишком большого количества вычислений, поэтому я пошел дальше, как в этом примере:

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

Но это дает мне исключение:

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)

Использование Scala 2.9.0.1 (то же поведение с 2.9.1). Что здесь не так?

1 Ответ

5 голосов
/ 27 ноября 2011

Похоже, ошибка.(Подайте отчет об ошибке, если он еще не сообщен и / или не исправлен!)

Тем временем вы можете использовать итератор в качестве обходного пути для этого конкретного кода:

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

(drop.toList, если вы счастливы получить итератор).

...