2010-03-14 3 views
5

다음 스칼라 코드는 some_file.txt의 각 줄을 인쇄합니다.for 루프의 스칼라 println

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

print 대신 println을 사용하면 some_file.txt가 이중 간격으로 인쇄됩니다. 대신, 프로그램은 some_file.txt의 모든 문자 뒤에 개행 문자를 인쇄합니다. 누군가 나에게 설명 할 수 있을까요? 스칼라 2.8.0 베타 1을 사용하고 있습니다.

답변

23

lines은 문자열의 일부 반복 가능한 컨테이너가 아니라 단일 문자열입니다. 이것은 .mkString 메서드를 호출했기 때문입니다.

문자열을 반복 할 때 한 번에 하나의 문자를 사용합니다. 따라서 for에있는 line은 실제로는 줄이 아니며 하나의 문자입니다. 당신은 아마 할 의도

통화 .getLines 대신 .mkString

+0

그는'fromPath'의 결과에'.mkString'을 호출했습니다. 이것은'Iterator [Char]'이고 추가 된 것들이 있습니다. 네가 이걸 안다는 걸 알지만 네가 그걸 더 분명하게 할 수있을 것 같아. 당신은 또한'String' 리터럴에 대한 이해를위한 예제를 넣을 수 있습니다. –

2

내가 for (line <- lines) print(line)line에 라인을 넣어하지 않는 것으로 의심되는 대신 문자였다. \n이 예상대로 출력됩니다. printprintln으로 바꾸면 모든 문자가 고유 한 행을 얻습니다.