2012-02-04 32 views
0

我通过线使用这种循环读取文件行:文件I/O循环过早打破?

for(line <- s.getLines()){ 
    mylist += otherFunction(line); 
} 

其中变量mylistArrayBuffer存储的数据类型定制的集合。该otherFunction(line);做这样的事情...

def otherFunction(list:String)={ 
    val line = s.getLine(index); 
    val t = new CustomType(0,1,line(0)); 
    t 
} 

CustomType被定义为...

class CustomType(name:String,id:Int,num:Int){} 

我ommitted很多代码,你可以看到,因为它是不相关的。我可以运行其余的函数,只要我注释掉otherFunction()的最后一行,它就会逐行读取文件直到EOF。为什么要将此函数中的值返回给我的列表,导致我的for循环停止?

+2

正如书面'otherFunction'返回'单元',所以它可能不会做你想做的。同样根据经验,错误的来源往往在于人们认为不相关的东西。如果您将代码缩减为裸编译片段,则更容易提供帮助。 – huynhjl 2012-02-04 21:38:24

+0

@huynhji我已更新我的代码以反映您的请求。 – user1189870 2012-02-04 22:14:21

+0

你已经省略了's'的类型,这可能是相当重要的... – 2012-02-04 23:46:52

回答

2

目前尚不清楚你想要在这里做什么。我假设s是一个scala.io.Source对象。为什么otherFunction接受一个它不使用的字符串参数? getLine已弃用,您不知道index来自何处。你真的想引用索引为0的字符串中的第一个字符吗?它真的应该是Int?假设这实际上是你想要做的,为什么不在迭代器上使用map

val list = s.getLines.map(i => new CustomType("0", 1, i(0).asDigit)).toIndexedSeq