【发布时间】:2011-08-29 06:18:58
【问题描述】:
这里是 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)
我做错了什么?我是否缺少一些配置?
顺便说一句,我认为编译器推断出延续的类型? This article 使用:
val result = reset {
1 + shift { k => k(k(5)) } + 1
}
但这在我的环境中无法编译...
【问题讨论】:
-
那么编译环境和运行时环境有什么变化呢? :-) 我的第一个嫌疑人是正在使用的冲突(意外和不同)Scala 运行时库。
-
@pst:看起来确实是这样,但我之前从来没有在这个盒子里装过 Scala,所以不会是版本不匹配吧?
-
在 REPL 上尝试了此代码,结果相同(Scala 版本 2.9.0.final(Java HotSpot(TM) 64 位服务器 VM,Java 1.6.0_25)在 Windows 7 64 位上)
-
最终,我无法使用 Eclipse 完成这项工作,但 IDEA 完美运行。
标签: scala continuations delimited-continuations