-Hi. Tôi muốn nhúng Scala REPL với môi trường khởi tạo vào ứng dụng của tôi. Tôi đã xem xét IMain
lớp và có vẻ như tôi có thể làm điều đó thông qua trường hợp của nó. Ví dụ được tạo và sau đó được lưu trữ vào intp
công khai var trong process()
của ILoop
.Scala - Khởi tạo môi trường REPL
Làm cách nào để liên kết một số tên và/hoặc thêm một số nhập trước process()
(ví dụ: trước REPL)?
mã sau thất bại trên đường 3 vì intp
chưa được tạo ra (=> 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)
Cảm ơn anh-.
UPDATE: Overriding createInterpreter()
tiếc là không làm việc:
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 đang bị mắc kẹt trên đầu vào (trông giống như bế tắc, chỉ xảy ra với mã ở trên):
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>
Cảm ơn dvigal gợi ý.
Tôi đã xem dự án và có vẻ như nó sẽ hoạt động. Cảm ơn bạn. – woky