Scala - REPL-Umgebung initialisieren
-Hallo. Ich möchte Scala REPL mit einbindeninitialisierte Umgebung in meine App. Ich habe angeschautIMain
Klasse und es scheint, ich könnte es über Instanz davon tun. Die Instanz wird erstellt und dann in gespeichertintp
öffentliche var inprocess()
vonILoop
.
Wie kann ich vorher einige Namen binden und / oder einige Importe hinzufügen?process()
(z. B. vor REPL)?
Der folgende Code schlägt in Zeile 3 fehl, weilintp
ist noch nicht angelegt (=> 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)
Vielen Dank-.
UPDATE: ÜberschreibencreateInterpreter()
funktioniert leider nicht:
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)
Der Interpreter bleibt bei der Eingabe hängen (sieht aus wie ein Deadlock, passiert nur mit dem obigen Code):
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>
Danke dvigal für den Vorschlag.