2010-07-22 9 views
6

की मैं ReadLine से तार की एक अनंत धारा बनाने के प्रयास कर रहा हूँ कॉल:स्ट्रीम readLines

import java.io.{BufferedReader, InputStreamReader} 
val in = new BufferedReader(new InputStreamReader(System in)) 
val input: Stream[String] = Stream.cons(in readLine, input) 

लेकिन ऐसा लगता है कि ReadLine कॉल lazily नहीं बुलाया जा रहा है। उस कोड को दर्ज करने के तुरंत बाद, रीडलाइन इनपुट की अपेक्षा करता है तो स्ट्रीम उसी इनपुट की एक अनंत सूची बन जाती है। क्या मेरे मन में क्या हासिल करना संभव है?

उत्तर

11
import java.io.{BufferedReader, InputStreamReader} 
val in = new BufferedReader(new InputStreamReader(System in)) 
val input = Stream.continually(in readLine) 
+0

क्या आपको स्ट्रीम बंद करने की आवश्यकता नहीं है? – Programmer

3

उदाहरण देखें Stream पर। ध्यान दें कि आलसी थंक पूंछ में है, सिर नहीं है। < http://www.scala-lang.org/docu/files/api/scala/collection/immutable/Stream $$ विपक्ष $: हर बार जब thunk शुरू हो जाती है यह अगले विपक्ष लौटना चाहिए (अगले thunk है जो बदले में अगले विपक्ष सहित आपूर्ति करना चाहिए सहित ....)

यहाँ Stream.cons के लिए हस्ताक्षर है । एचटीएमएल >। apply पर दूसरे तर्क के रूप में थंक (=> स्ट्रीम) पर ध्यान दें।

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