为什么长度函数似乎删除了列表?

时间:2013-08-25 15:11:59

标签: scala

我有这段代码:

 for (f <- file_list){
                  val file_name = path + "\\" + f + ".txt"
                  val line_list = Source.fromFile(file_name).getLines()
                  println (file_name + ": " + line_list.length)
                  println (file_name + ": " + line_list.length)
                  total_number_lines += line_list.size
              }

我有一个文件列表,我为每个文件打开它,将其加载为行列表,然后计算列表中的行数。

前一次调用line_list.length给出正确的行号值,但后者总是返回零。实际上,执行length函数后,line_list列表似乎是空的。

我真的不明白为什么会这样。

我缺少什么?

2 个答案:

答案 0 :(得分:6)

Source.getLines()会返回Iterator[String],而不是集合,因此在其上调用.length将完全消耗它。

如果您想多次使用Source.fromFile(file_name).getLines().toList,可以使用{{1}}。

答案 1 :(得分:5)

getLines()返回Iterator[String],您只能遍历一次迭代器。调用length会耗尽迭代器,因此在到达结束时会调用lengthsize的后续调用,因此它显示为空:

  

特别重要的是要注意,除非另有说明,   在调用方法之后,永远不应该使用迭代器。他们俩   最重要的例外也是唯一的抽象方法:next和   hasNext。