Scala中for循环中的println

6
以下Scala代码正如我所期望的那样 - 它打印出some_file.txt的每一行。
import scala.io.Source
val lines = Source.fromPath("some_file.txt").mkString
for (line <- lines) print(line)    

如果我使用println而不是print,我希望看到some_file.txt以双倍间距打印出来。然而,程序在some_file.txt的每个字符后都会打印一个新行。有人能解释一下吗?我正在使用Scala 2.8.0 Beta 1。
2个回答

23

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

当您迭代字符串时,每次只会处理一个字符。因此,在您的for循环中,line实际上不是一行,而是单个字符。

您可能想要做的是调用.getLines而不是.mkString


他在fromPath的结果上调用了.mkString,该结果是一个带有一些附加内容的Iterator[Char]。我知道你知道这个,但我认为你可以让它更清晰明了。你还可以举一个关于String字面量的for推导式的例子。 - Daniel C. Sobral

2
我怀疑for (line <- lines) print(line)并不是把一行放在line中,而是放了一个字符。输出结果也是如此,因为\n也在里面。当你将print替换为println时,每个字符都有自己的一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接