Ошибка продолжения с разделителями в Scala во время выполнения - PullRequest
6 голосов
/ 20 мая 2011

Новичок 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)
}

Это нормально компилируется, затем я нажимаю Запуск от имени приложения Scala и получаю следующее исключение:

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                   
}

но это не компилируется в моей среде ...

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Эта ошибка означает, что вы не добавили плагин Scala CPS - он не является частью стандартной сборки (пока).Поместите банку на путь к классу и выполните Scala следующим образом, чтобы включить продолжения:

$ scala -P:continuations:enable
1 голос
/ 10 июля 2014

Эту проблему можно решить в Eclipse, добавив класс плагинов CPS в разделе Scala Compiler> Advanced, а также включив переключатель:

Enabling the continuations switch Adding the plugin and setting the plugins path Xplugin должно быть scala.tools.selectivecps.SelectiveCPSPluginи Xpluginsdir должен быть каталогом, который содержит org.scala-lang.plugins.scala-continuations-plugin.jar

...