-やあ。環境が初期化された Scala REPL をアプリに組み込みたいと考えています。私はIMain
クラスを見てきましたが、そのインスタンスを介してそれを行うことができるようです。インスタンスが作成され、 of のintp
public var に格納されます。process()
ILoop
いくつかの名前をバインドしたり、以前にprocess()
(たとえば REPL の前に) いくつかのインポートを追加したりするにはどうすればよいですか?
intp
次のコードは、まだ作成されていない (=> NPE)ため、3 行目で失敗します。
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)
ありがとうございました-。
更新:createInterpreter()
残念ながらオーバーライドは機能しません:
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)
インタープリターが入力でスタックします (デッドロックのように見えます。上記のコードでのみ発生します):
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>
提案してくれてありがとうdvigal。