2016-11-19 3 views
0

Я пытаюсь читать входной поток в кусках:результатов TakeWhile в типе несоответствии

import scala.io.Source 

// val in = Source.stdin.mkString("") 
val in = Source.fromFile("/shared/american.txt").getLines.mkString("") 
var ptr = 0 
val out = Stream.continually { 
    val ix = math.min(ptr+80,in.length) 
    val ret = in.substring(ptr, ix) 
    ptr = ix 
    ret 
} 

out: scala.collection.immutable.Stream[String] = Stream(Unmentionable has an enthusiastic 35% of the popular vote. I discount the other 10% or s, ?) 

Но что синтаксис для take кусковых? Я пробовал:

val chunks = out.takeWhile(ptr < in.length) 


<console>:13: error: type mismatch; 
found : Boolean 
required: String => Boolean 
      val ret = out.takeWhile(ptr < in.length) 

ответ

0

Что вы пытаетесь достичь? Если вы просто пытаетесь сломать строку (файл) на куски, вы можете использовать функции или .groupBy().

Что касается вашей текущей ошибки, компилятор сообщает вам, что вам нужно делать. Вы даете логическое значение:

val chunks = out.takeWhile(ptr < in.length) // ptr < in.length evaluates to a boolean 

но вы должны дать функцию, которая принимает строку и возвращает логическое значение:

val chunks = out.takeWhile(s => ptr < s.length) // Something like this 
1

Чтение файла в 80 символов куски? Как об этом?

val in = io.Source.fromFile("file.txt").mkString.grouped(80) 
while (in.hasNext) { 
    // in.next is your chunk 
} 
+0

сгруппировано (n) будет делать то же самое, что и скользящий (n, n) – soote

+0

К сожалению. Пропустил это. Благодарю. – jwvh

Смежные вопросы