2011-05-19 13 views
6

Novato de Scala aquí, acabo de descargar Eclipse 3.6.2 y Scala IDE 2.0.0-beta4 (con Scala 2.9.0.final). Se crea un nuevo proyecto Scala para tratar continuaciones delimitados:Error de continuación delimitado por Scala en el tiempo de ejecución

package delimCCTests 

import scala.util.continuations._ 

object Test extends App { 
    val result = reset { 
    1 + shift { k: (Int => Int) => k(k(5)) } + 1 
    } 
    println(result) 
} 

Este compila bien, a continuación, hacer clic en Ejecutar como -> aplicación Scala y conseguir esta excepción:

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) 

¿Qué estoy haciendo mal? ¿Me falta algo de configuración?

BTW Creo que el compilador dedujo el tipo de continuación? This article utiliza:

val result = reset { 
    1 + shift { k => k(k(5)) } + 1     
} 

pero esto no se compila en mi entorno ... significa

+0

Entonces, ¿qué cambia entre la co entorno de mpile y el entorno de tiempo de ejecución? :-) Mi primer sospechoso es una biblioteca en tiempo de ejecución de Scala conflictiva (inesperada y diferente). –

+0

@pst: ciertamente se ve así, pero nunca antes había tenido Scala en esta caja, así que no puede ser una versión no coincidente, ¿verdad? –

+0

Intenté este código en el REPL con el mismo resultado (Scala versión 2.9.0.final (Java HotSpot (TM) 64-Bit Server VM, Java 1.6.0_25) en Windows 7 de 64 bits) –

Respuesta

3

Este error que no agregó Scala CPS complemento - que no es una parte de un conjunto estándar (hasta el momento) Ponga the jar en la ruta de clases, y ejecutar Scala es la siguiente, con el fin de tener continuaciones permitido:

$ scala -P:continuations:enable 
+0

No, hice lo explicado en http://stackoverflow.com/questions/4556540/continuations-in-scala-2-8-1-and-eclipse/4557174#comment-7005822 y recibo un error en tiempo de compilación: "mala opción: -P: continuaciones: habilite" –

+0

Además, ¿cómo es que encuentra 'reset' pero no' shift'? –

+1

"mala opción: -P: continuaciones: habilitar" - este error significa que no tiene 'continuations.jar' en el classpath –

1

Esto se puede resolver en Eclipse mediante la adición de la clase de CPS plugins en la Scala Generador> sección avanzada, así como para permitir el interruptor:

Enabling the continuations switch Adding the plugin and setting the plugins path Xplugin debe ser scala.tools.selectivecps.SelectiveCPSPlugin y Xpluginsdir debe ser el directorio que contiene org.scala-lang.plugins.scala-continuations-plugin.jar

Cuestiones relacionadas