私は基本的に、ScalaAPIページで区切られた継続の例に従っています。以下のコードは正常に機能します。
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)
^
2番目のタイプのパラメーターとして追加Any
しても役に立ちません。どのタイプを提供する必要があるかについて何か考えはありますか?