-Hi. Mi piacerebbe incorporare Scala REPL con l'ambiente inizializzato nella mia app. Ho esaminato la classe IMain
e sembra che potrei farlo tramite l'istanza di esso. L'istanza viene creata e quindi archiviata nella variabile pubblica intp
in process()
di ILoop
.Scala - Inizializza ambiente REPL
Come posso associare alcuni nomi e/o aggiungere alcune importazioni prima dello process()
(ad esempio prima di REPL)?
Dopo codice non sulla linea 3, perché intp
non è ancora creata (=> 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)
Grazie te-.
UPDATE: Overriding createInterpreter()
purtroppo non funziona:
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)
Interpreter è bloccato sull'ingresso (assomiglia situazione di stallo, si verifica solo con codice di cui sopra):
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>
Grazie dvigal per il suggerimento.
ho guardato il progetto e sembra che funzionerà. Grazie. – woky