Как включить продолжения в Scala?

Вопрос говорит все.

(Тем не менее, детали того, как получить доступ к операциям shift и reset, изменились с годами. В старых блогах и ответах на переполнение стека может быть устаревшая информация.)

См. также Что такое Scala продолжения и зачем их использовать?, в котором говорится о том, что вы можете делать с shift и reset после того, как вы их.

Ответ 1

Scala 2.11

Самый простой способ - использовать sbt:

scalaVersion := "2.11.6"

autoCompilerPlugins := true

addCompilerPlugin(
  "org.scala-lang.plugins" % "scala-continuations-plugin_2.11.6" % "1.0.2")

libraryDependencies +=
  "org.scala-lang.plugins" %% "scala-continuations-library" % "1.0.2"

scalacOptions += "-P:continuations:enable"

В вашем коде (или REPL) сделайте import scala.util.continuations._

Теперь вы можете использовать shift и reset в своем сердечном содержимом.

историческая информация для Scala 2.8, 2.9, 2.10

Вам нужно запустить Scala (или scalac) с помощью флага -P:continuations:enable.

В вашем коде выполните import scala.util.continuations._

Теперь вы можете использовать shift и reset в своем сердечном содержимом.

Если вы используете sbt 0.7, см. https://groups.google.com/forum/#!topic/simple-build-tool/Uj-7zl9n3f4

Если вы используете sbt 0.11+, см. https://gist.github.com/1302944

Если вы используете maven, см. http://scala-programming-language.1934581.n4.nabble.com/scala-using-continuations-plugin-with-2-8-0-RC1-and-maven-td2065949.html#a2065949

Ответ 2

Решение без SBT:

scala -Xpluginsdir /.../scala/lib/ -P:continuations:enable

Работает на scala 2.11.6, но плагин/библиотека сказал, что он больше не будет включен в scala 2.12