2010-03-14 19 views
5

Aşağıdaki Scala kodu tam olarak beklediğim şeyi yapar - her bir some_file.txt satırını yazdırır. Bunun yerine baskı println kullanılmıyorsa herhangiScala println for döngüsünde

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

, ben some_file.txt çift aralıklı ile basılmış görmeyi bekliyoruz. Bunun yerine, program, some_file.txt dosyasının her karakterinden sonra yeni bir satır yazdırır. Birisi bana bunu açıklayabilir mi? Scala 2.8.0 Beta 1.

cevap

23

lines tek bir dizedir, bazı yinelenen dizeler dizisi kullanmıyorum. Bunun nedeni, üzerinde .mkString yöntemini çağırmanızdır.

Bir dize üzerinde yinelediğinizde, bir seferde bir karakter yaparsınız. Yani for'unuzdaki line aslında bir satır değil, tek bir karakter. muhtemelen yapmaya niyetli Ne

çağrı .getLines yerine .mkString

+0

Bazı eklenmiş öğeler içeren bir 'Iterator [Char]' olan fromPath işlevi sonucunda '.mkString' adını verdi. Bunu bildiğini biliyorum ama bence bunu daha iyi yapabilirsin. Ayrıca, bir 'String' literalinde anlama için bir örnek verebiliriz. –

2

ben for (line <- lines) print(line)line bir çizgi koymak değil şüpheli ama bunun yerine bir karakterdi. Çıktının \n'dan beri beklendiği gibi yapılması da var. print'u println ile değiştirdiğinizde, her karakter kendi satırını alır.

İlgili konular