2010-03-14 61 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時,每個字符都有自己的行。