如何解决运行时Scala定界连续错误
| Scala新手,我刚刚下载了Eclipse 3.6.2和Scala IDE 2.0.0-beta4(使用Scala 2.9.0.final)。我创建一个新的Scala项目来尝试定界的延续:package delimCCTests
import scala.util.continuations._
object Test extends App {
val result = reset {
1 + shift { k: (Int => Int) => k(k(5)) } + 1
}
println(result)
}
这样编译就可以了,然后单击Run as-> Scala application并得到以下异常:
Exception in thread \"main\" java.lang.NoSuchMethodError: scala.util.continuations.package$.shift(Lscala/Function1;)Ljava/lang/Object;
at delimCCTests.Test$$anonfun$1.apply$mcI$sp(DelimCCTests.scala:7)
at delimCCTests.Test$$anonfun$1.apply(DelimCCTests.scala:7)
at delimCCTests.Test$$anonfun$1.apply(DelimCCTests.scala:7)
at scala.util.continuations.package$.reset(package.scala:20)
at delimCCTests.Test$delayedInit$body.apply(DelimCCTests.scala:6)
at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.App$$anonfun$main$1.apply(App.scala:60)
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
at scala.collection.immutable.List.foreach(List.scala:45)
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30)
at scala.App$class.main(App.scala:60)
at delimCCTests.Test$.main(DelimCCTests.scala:5)
at delimCCTests.Test.main(DelimCCTests.scala)
我究竟做错了什么?我是否缺少某些配置?
顺便说一句,我以为编译器可以推断出延续的类型?本文使用:
val result = reset {
1 + shift { k => k(k(5)) } + 1
}
但这在我的环境中无法编译...
解决方法
此错误意味着您没有添加Scala CPS插件-到目前为止,它还不是标准程序集的一部分。将jar放在类路径上,然后运行Scala,以启用继续功能:
$ scala -P:continuations:enable
,在eclipse中,可以通过在Scala编译器>高级部分中添加CPS插件类并启用开关来解决此问题:
Xplugin
应为scala.tools.selectivecps.SelectiveCPSPlugin
,Xpluginsdir
应为包含org.scala-lang.plugins.scala-continuations-plugin.jar
的目录
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。