如何在 Scala 中启用延续?
问题说明了一切。
(然而,如何访问 shift
和 reset
操作的细节多年来已经发生了变化。旧的博客条目和 Stack Overflow 答案可能包含过时的信息。 )
另请参阅 什么是 Scala 延续以及为什么使用它们?,其中讨论了您可能希望使用 shift 执行的操作 和
reset
一旦你有了它们。
Question says it all.
(Yet, the details of how to get access to the shift
and reset
operations has changed over the years. Old blog entries and Stack Overflow answers may have out of date information.)
See also What are Scala continuations and why use them? which talks about what you might want to do with shift
and reset
once you have them.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Scala 2.12 或 2.11
最简单的方法是使用 sbt。以下是要放入
build.sbt
中的内容:在代码(或 REPL)中,执行
import scala.util.continuations._
您现在可以使用
shift
并重置
到您想要的内容。请注意,我使用了 Scala 版本 2.12.2,因为这是该插件发布的最后一个版本。如果您想使用较新的 2.12.x 版本,您需要从源代码自行构建插件。如果您使用 2.12.2,您可能需要使用 Java 8,因为根据 https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html Java 11 支持直到 2.12.4 才落地。
Scala 2.8、2.9、2.10 的历史信息
您必须使用
-P:continuations:enable
标志启动 scala(或 scalac)。在您的代码中,执行
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
Scala 2.12 or 2.11
The easiest way is to use sbt. Here's what to put in your
build.sbt
:In your code (or the REPL), do
import scala.util.continuations._
You can now use
shift
andreset
to your heart's content.Note that I used a Scala version of 2.12.2 because that's the last version the plugin was published for. If you want to use a newer 2.12.x version, you'd need to build the plugin yourself from source. If you use 2.12.2, you'll probably need to be on Java 8, since according to https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html Java 11 support didn't land until 2.12.4.
historical information for Scala 2.8, 2.9, 2.10
You have to start scala (or scalac) with the
-P:continuations:enable
flag.In your code, do
import scala.util.continuations._
You can now use
shift
andreset
to your heart's content.If you're using sbt 0.7, see https://groups.google.com/forum/#!topic/simple-build-tool/Uj-7zl9n3f4
If you're using sbt 0.11+, see https://gist.github.com/1302944
If you're using maven, see http://scala-programming-language.1934581.n4.nabble.com/scala-using-continuations-plugin-with-2-8-0-RC1-and-maven-td2065949.html#a2065949
非 SBT 解决方案:
适用于 scala 2.11.6,但插件/库表示它将不再包含在 Scala 中2.12
Non SBT solution:
Works on scala 2.11.6, but the plugin/library said that it will no longer be included with Scala 2.12