-Hi. Chciałbym umieścić w mojej aplikacji Scala REPL z zainicjowanym środowiskiem. Przyjrzałem się klasie IMain
i wygląda na to, że mógłbym to zrobić poprzez jej instancję. Instancja jest tworzona, a następnie zapisywana w intp
publicznych zmianach w process()
z ILoop
.Scala - Inicjowanie środowiska REPL
Jak mogę powiązać niektóre nazwy i/lub dodać import przed process()
(np. Przed REPL)?
następujący kod nie działa na linii 3, ponieważ intp
nie został jeszcze utworzony (=> 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)
Thank you-.
UPDATE: Zastępowanie createInterpreter()
niestety nie działa:
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 utknął na wejściu (wygląda impasu, zdarza się tylko z kodem powyżej):
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>
Dzięki dvigal za sugestię.
Spojrzałem na projekt i wygląda na to, że zadziała. Dziękuję Ci. – woky