-Hi. Me gustaría incrustar Scala REPL con entorno inicializado en mi aplicación. Miré en la clase IMain
y parece que podría hacerlo a través de una instancia. La instancia se crea y luego se almacena en intp
var pública en process()
de ILoop
.Scala - Inicializar ambiente REPL
¿Cómo puedo enlazar algunos nombres y/o agregar algunas importaciones antes de process()
(por ejemplo, antes de REPL)?
siguiente código de falla en la línea 3, ya intp
no ha sido creada (=> NPE):
val x = 3
val interp = new ILoop
interp.bind("x", x) // -> interp.intp.bind("x", x)
val settings = new Settings
settings.usejavacp.value = true
interp.process(settings)
Gracias You-.
ACTUALIZACIÓN: Anulación createInterpreter()
por desgracia no funciona:
val x = 3
val interp = new ILoop {
override def createInterpreter() {
super.createInterpreter()
intp.bind("x", x) // -> interp.intp.bind("x", x)
}
}
val settings = new Settings
settings.usejavacp.value = true
interp.process(settings)
intérprete se ha quedado atascado en la entrada (se parece a punto muerto, ocurre sólo con el código de seguridad):
x: Int = 3
Failed to created JLineReader: java.lang.NoClassDefFoundError: scala/tools/jline/console/completer/Completer
Falling back to SimpleReader.
Welcome to Scala version 2.9.2 (OpenJDK 64-Bit Server VM, Java 1.7.0_06-icedtea).
Type in expressions to have them evaluated.
Type :help for more information.
scala> println
<infinite_sleep>
Gracias dvigal para la sugerencia.
Miré el proyecto y parece que funcionará. Gracias. – woky