2011-08-10 11 views
11

मुझे समझ में नहीं आ रहा है कि दो बिट्स कोड जो वास्तव में एक ही काम करने के लिए हैं, स्कैला में अलग-अलग चीजें करें।स्केल 'सेफाइल' अजीबता?

पहले उदाहरण:

scala> val ggg = Source.fromFile("/somefile"); 
ggg: scala.io.BufferedSource = non-empty iterator 

scala> ggg.getLines(); 
res67: Iterator[String] = empty iterator 

दूसरा उदाहरण:

scala> Source.fromFile("/somefile").getLines(); 
res68: Iterator[String] = non-empty iterator 

वे एक ही बात करने के लिए नहीं होती हैं, या मैं कुछ याद आ रही है?

+0

आपको अर्धविराम की आवश्यकता नहीं है। यह मेरे लिए आरईपीएल (2.8.2.आरसी 1) में काम करता है। –

+0

मुझे अर्धविराम पसंद है। –

+0

;) वह गायब हो जाएगा। –

उत्तर

6

यह BufferedSource.toString के साथ एक quirk (बग?) लगता है। का निरीक्षण करें:

// no problem 
scala> { val x = Source.fromFile("foo.txt"); x.getLines() } 
res10: Iterator[String] = non-empty iterator 

// ahh, calling toString somehow emptied our iterator 
scala> { val x = Source.fromFile("foo.txt"); println(x.toString); x.getLines() } 
non-empty iterator 
res11: Iterator[String] = empty iterator 

अभिव्यक्ति के मूल्य दिखाने के लिए, आरईपीएल BufferedSource.toString कॉल करने के लिए जरूरत है, और इस इटरेटर खाली करने के पक्ष प्रभाव पड़ता है।

+0

मैं फ्रीबीएसडी पर 2.8.0.final पर इस या मूल रिपोर्ट को दोबारा नहीं कर सकता। मैंने बड़ी फाइलों, एक लाइन फाइलों और खाली फाइलों के साथ प्रयास किया। –

+1

मैं ओएस एक्स पर 2.9.1 आरसी 1 का उपयोग कर रहा हूं। एक रिग्रेशन की तरह लगता है। मैंने अभी देखा है कि मैं इसे रात के निर्माण पर पुन: उत्पन्न नहीं कर सकता, इसलिए ऐसा लगता है कि यह ट्रंक में तय किया गया है। –

+0

मैं '2.9.0.1' पर हूं। –

2

इस बग की तरह दिखता है: SI-4662

स्पष्ट रूप से ट्रंक Changeset 25212 में तय किया गया है, लेकिन 2.9.1 में जहां तक ​​मैं देख सकता हूं।

बग नोट्स में यह उल्लेख किया गया है कि यह संभवतः केवल "असली" कोड में नहीं, बल्कि आरईपीएल में प्रकट होता है।

+1

मैं 2.9 पर हूं .1। फाइनल और मुझे असली कोड में बग मिल रहा है –