我所要做的是創建一個程序來充當REPL之間的中保(可以說斯卡拉REPL)和用戶。換句話說,用戶應該輸入命令,而不是直接進入REPL執行,而是將它們傳遞給程序,然後程序在做一些編輯後將其返回給REPL執行,顯示答案等等上。一個REPL和程序之間的相互作用
我迄今爲止得到的使用scala.tools.jline.console.ConsoleReader顯示一個提示,一個簡單的界面,讓用戶輸入並調用get_edited_data
後顯示的結果我也知道,叫「斯卡拉」! <自己完成這項工作相當好。 我無法將自己的想法包裹起來,就是如何連接它們。我已經嘗試使用ProcessIO沒有運氣。
import java.io.PrintWriter
import scala.sys.process._
import scala.tools.jline.console.ConsoleReader
object Interfere {
def main(args: Array[String]) {
val repl = "scala"
val console = new ConsoleReader
val prompt = "prompt> "
console.setPrompt(prompt)
val out = new PrintWriter(
console.getTerminal.wrapOutIfNeeded(System.out)
)
var line = console.readLine
while (!line.equals("bye")) {
val res = get_edited_data(line)
out.println(s"The answer: $res")
out.flush()
line = console.readLine
}
}
}
我所做的與ProcessIO是像下面。但它沒有意義,因爲不可能將當前行作爲輸入,並且通常可以訪問賦予它的內容。
Process(repl).run(
new ProcessIO(
stdin => line,
stdout => out,
stderr => out
)
)