2010-03-14 12 views
5

Der folgende Scala-Code tut genau das, was ich erwarte - er druckt jede Zeile von some_file.txt.Scala println in einer for-Schleife

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

Wenn ich anstelle von Druck println verwenden, erwarte ich some_file.txt ausgedruckt mit Doppel Abstand zu sehen. Stattdessen druckt das Programm nach jedem Zeichen von some_file.txt einen Zeilenumbruch. Kann mir das jemand erklären? Ich verwende Scala 2.8.0 Beta 1.

Antwort

23

lines ist eine einzelne Zeichenfolge, nicht einige iterable Container von Zeichenfolgen. Das liegt daran, dass Sie die Methode .mkString aufgerufen haben.

Wenn Sie über eine Zeichenfolge iterieren, tun Sie dies jeweils ein Zeichen. Also die line in Ihrer for ist eigentlich keine Linie, es ist ein einzelnes Zeichen.

Was Sie wahrscheinlich zu tun gedenke war Anruf .getLines statt .mkString

+0

Er nannte '.mkString' das Ergebnis von' fromPath', was ein 'Iterator [Char]' mit etwas hinzugefügtem Zeug ist. Ich weiß, du weißt das, aber ich denke, du könntest es klarer machen. Sie können auch ein Beispiel für ein Verständnis für ein 'String'-Literal angeben. –

2

Ich vermute, dass for (line <- lines) print(line) keine Zeile in line nicht gesetzt, sondern ein Charakter. Die Ausgabe ist wie erwartet, da die \n auch dort ist. Wenn Sie die print durch println ersetzen, erhält jeder Charakter seine eigene Linie.

Verwandte Themen