7

私はかなりの数のリストを持っていました。それらに何らかの操作を適用し、いくつかの条件を満たす結果のみを取得する必要がありました。リストは順番に並んでいるので、条件を満たさない番号を見つけたら、探すのをやめることができます。

あまり多くの計算を行わないようにしたかったので、次の例のように進みました。

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と同じ動作)。ここで何が問題になっていますか?

4

1 に答える 1

5

バグのように見えます。(まだ報告されていない、または修正されていない場合は、バグ報告を提出してください!)

それまでの間、この特定のコードの回避策として iterator を使用できます。

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

.toList(イテレータで終わるのがよければ削除してください)。

于 2011-11-27T09:02:21.397 に答える