2010-03-14 46 views
5

Đoạn mã Scala sau đây chỉ là những gì tôi mong đợi nó - nó in mỗi dòng của some_file.txt.Scala println trong vòng lặp for

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

Nếu tôi sử dụng println thay vì in, tôi hy vọng sẽ thấy some_file.txt được in với khoảng cách gấp đôi. Thay vào đó, chương trình sẽ in một dòng mới sau mỗi ký tự của some_file.txt. người nào có thể giải thích điều này cho tôi? Tôi đang sử dụng Scala 2.8.0 Beta 1.

Trả lời

23

lines là một chuỗi duy nhất, không phải một số chuỗi có thể lặp lại. Điều này là do bạn đã gọi phương thức .mkString trên đó.

Khi bạn lặp qua chuỗi, bạn thực hiện một ký tự cùng một lúc. Vì vậy, line trong số for của bạn không thực sự là một dòng, đó là một ký tự đơn.

Những gì bạn có thể dùng để làm là gọi .getLines thay vì .mkString

+0

Ông gọi là '.mkString' trên kết quả của' fromPath', là một 'Iterator [Char]' với một số nội dung được thêm vào. Tôi biết bạn biết điều này, nhưng tôi nghĩ bạn có thể làm cho nó rõ ràng hơn. Bạn cũng có thể đặt một ví dụ về một sự hiểu biết qua một chữ 'Chuỗi'. –

2

Tôi nghi ngờ rằng for (line <- lines) print(line) không đặt một dòng trong line nhưng thay vì một nhân vật. Làm cho đầu ra như mong đợi từ \n cũng vậy. Khi bạn thay thế print bằng println mỗi ký tự sẽ có dòng riêng.

Các vấn đề liên quan