Я в основном следую примеру, приведенному в Scala. Страница API для продолжений с разделителями. Код ниже работает нормально:
import scala.util.continuations._
import scala.collection.mutable.HashMap
val sessions = new HashMap[Int, Int=>Unit]
def ask(prompt: String): Int @cps[Unit] = shift {
ret: (Int => Unit) => {
val id = sessions.size
printf("%s\nrespond with: submit(0x%x, ...)\n", prompt, id)
sessions += id -> ret
}
}
def submit(id: Int, addend: Int): Unit = {
sessions.get(id) match {
case Some(continueWith) => continueWith(addend)
}
}
def go = reset {
println("Welcome!")
val first = ask("Please give me a number")
val second = ask("Please enter another number")
printf("The sum of your numbers is: %d\n", first + second)
}
Однако, когда я изменяю go
на следующее:
def go = reset {
println("Welcome!")
List("First?","Second?").map[Int @cps[Unit]](ask)
}
Я получаю эту ошибку:
error: wrong number of type parameters for method map: [B, That](f: String => B)
(implicit bf: scala.collection.generic.CanBuildFrom[List[String],B,That])That
List("First?","Second?").map[Int @cps[Unit]](ask)
^
Добавление Any
в качестве параметра второго типа не помогает. Любая идея, какие типы я должен поставлять?