2010-03-14 57 views
5

下面的Scala代码正如我所期望的那样 - 它打印some_file.txt的每一行。for循环中的Scala println

import scala.io.Source 
val lines = Source.fromPath("some_file.txt").mkString 
for (line <- lines) print(line)  

如果我使用println而不是print,我期望看到用double-spacing打印出来的some_file.txt。相反,该程序在some_file.txt的每个字符后面都会打印一个换行符。有人可以向我解释这一点吗?我正在使用Scala 2.8.0 Beta 1.

回答

23

lines是一个单个字符串,不是一些可迭代的字符串容器。这是因为你调用了.mkString方法。

当你遍历一个字符串时,你一次只做一个字符。因此for中的line实际上不是一行,而是单个字符。

什么你可能打算做的是电话.getLines而不是.mkString

+0

他对'fromPath'的结果调用了'.mkString',它是一个'Iterator [Char]',带有一些额外的东西。我知道你知道这一点,但我认为你可以更清楚。你也可以把一个理解为'String'文字的例子。 – 2010-03-14 19:46:25

2

我怀疑for (line <- lines) print(line)不把线line而是一个字符。自\n以来,如预期那样输出。当你用println替换print时,每个字符都有自己的行。