2011-11-27 20 views
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) 

स्काला 2.9.0.1 (समान का उपयोग करना 2.9.1 के साथ व्यवहार)। यहाँ क्या गलत है?

+0

2.8 के साथ ठीक काम करता है –

उत्तर

5

एक बग की तरह दिखता है। इस बीच में (एक बग रिपोर्ट फ़ाइल, यदि वह पहले से सूचना दी नहीं कर रहा है और/या तय!)

, आप इस विशेष कोड के लिए एक समाधान के रूप इटरेटर का उपयोग कर सकते हैं:

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

(ड्रॉप .toList अगर आप एक पुनरावर्तक के साथ खत्म करने के लिए खुश हैं)।

संबंधित मुद्दे