То, что я пытаюсь сделать, это создать программу, чтобы выступать в качестве ходатая между РЕПЛ (позволяет сказать SCALA 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
)
)