Skip to content

Instantly share code, notes, and snippets.

@savonarola
Forked from anonymous/cont.scala
Created September 19, 2010 13:03
Show Gist options
  • Save savonarola/586737 to your computer and use it in GitHub Desktop.
Save savonarola/586737 to your computer and use it in GitHub Desktop.
// scala -P:continuations:enable cont.scala
import scala.util.continuations.{reset,shift,cpsParam}
def saveCont[A,B](resetFun : (Unit => A @cpsParam[B,Unit] ) => B @cpsParam[B,Unit]) : A => B = {
var cc : A => B = null;
val switchFun : (Unit => A @cpsParam[B,Unit] )= Unit => {
shift{ k : (A => B) =>
cc = k
}
}
reset{
resetFun(switchFun)
}
cc
}
val cc = saveCont[Int,Int]{switch =>
val x = 5 + switch() // switch выкидывает из стека, сохраняя его в cc
x + 6
}
println(cc(5)) // cc(5) продолжает выполнять стек, будто switch() вернуло 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment