2010-03-14 4 views
5

Следующий код Scala выполняет именно то, что я ожидаю - он печатает каждую строку some_file.txt.Scala println в цикле for

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

Если я использую Println вместо печати, я ожидал увидеть some_file.txt распечатаны с двойным интервалом. Вместо этого программа печатает новую строку после каждого символа some_file.txt. Может ли кто-нибудь объяснить это мне? Я использую Scala 2.8.0 Beta 1.

ответ

23

lines - это одна строка, а не какой-либо итерируемый контейнер строк. Это потому, что вы написали метод .mkString.

Когда вы перебираете строку, вы делаете это по одному персонажу за раз. Таким образом, line в вашем for на самом деле не является линией, это единственный символ.

То, что вы, вероятно, намеревался сделать, это вызов .getLines вместо .mkString

+0

Он вызвал '.mkString' на результат' fromPath', который является 'Iterator [Char]' с некоторыми добавленными вещами. Я знаю, что вы это знаете, но я думаю, вы могли бы сделать это более ясным. Вы могли бы также привести пример понимания для литерала 'String'. –

2

Я подозреваю, что for (line <- lines) print(line) не ставит линию в line, но вместо этого персонажа. Вывод ожидаемого результата, так как есть \n. Когда вы заменяете printprintln, каждый символ получает свою собственную линию.

Смежные вопросы