-Hi. Ich möchte Scala REPL mit initialisierte Umgebung in meine App einbetten. Ich habe IMain
Klasse angesehen und es scheint, ich könnte es über Instanz davon tun. Die Instanz wird erstellt und dann in intp
public var in von ILoop
gespeichert.Scala - REPL-Umgebung initialisieren
Wie kann ich einige Namen binden und/oder einige Importe vor process()
(z. B. vor REPL) hinzufügen?
folgender Code nicht auf der Linie 3, weil intp
noch nicht erstellt wird (=> 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)
du- danken.
UPDATE: Übergeordnete createInterpreter()
leider nicht funktioniert:
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 auf Eingang stecken (sieht aus wie Deadlock, geschieht nur mit dem Code oben):
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>
Vielen Dank für Vorschlag dvigal.
Ich schaute auf das Projekt und es scheint, es wird funktionieren. Vielen Dank. – woky