6

次の Scala コードは、まさに期待通りの動作をします。some_file.txt の各行を出力します。

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

print の代わりに println を使用すると、some_file.txt が 2 倍の間隔で印刷されることが予想されます。代わりに、プログラムは some_file.txt のすべての文字の後に改行を出力します。誰かが私にこれを説明できますか?Scala 2.8.0 Beta 1 を使用しています。

4

2 に答える 2

23

linesは単一の文字列であり、反復可能な文字列のコンテナではありません。これは、.mkStringメソッドを呼び出したためです。

文字列を反復処理するときは、一度に1文字ずつ反復処理します。つまり、linein your infor は実際には行ではなく、単一の文字です。

おそらくあなたが意図したのは、.getLines代わりに電話することでした.mkString

于 2010-03-14T11:49:05.187 に答える
2

私はそれfor (line <- lines) print(line)が線を入れずline、代わりに文字を入れているのではないかと思います。もあるので期待通りに出力し\nます。printをすべての文字に置き換えるとprintln、独自の行が取得されます。

于 2010-03-14T11:53:43.290 に答える