我有一个应用程序,我想提示。如果它有帮助,这是一个图形数据库实现,我需要一个提示,就像任何其他数据库客户端(MySQL,Postgresql等)。
到目前为止,我有自己的REPL:
object App extends Application {
REPL ! Read
}
object REPL extends Actor {
def act() {
loop {
react {
case Read => {
print("prompt> ")
var message = Console.readLine
this ! Eval(message)
}
case More(sofar) => {
//Eval didn't see a semicolon
print(" --> ")
var message = Console.readLine
this ! Eval(sofar + " " + message)
}
case Eval(message) => {
Evaluator ! Eval(message)
}
case Print(message) => {
println(message)
//And here's the loop
this ! Read
}
case Exit => {
exit()
}
case _ => {
println("App: How did we get here")
}
}
}
}
this.start
}
它有效,但我真的想要有历史的东西。标签完成不是必需的。
对好图书馆的任何建议? Scala或Java可以工作。
为了清楚我不需要REPL来评估我的代码(我用scala得到它!),我也不打算从命令行调用或使用它。我正在寻找一个提示,这是我的客户端应用启动时的用户体验。
答案 0 :(得分:6)
Scala本身以及许多程序在其REPL中使用了类似readline的库。具体而言,JLine。
我发现another question关于此问题,答案看起来并不乐观。
答案 1 :(得分:2)
BeanShell执行您想要的一些操作:http://www.beanshell.org/
答案 2 :(得分:0)
我明白了。这两个博客真的很有帮助。
def interprete(code: String) : Future[String] = {
val p = Promise[String]()
Future {
var result = reader.readLine()
p.success(result)
}
writer.write(code + "\n")
writer.flush()
p.future
}
for (ln <- io.Source.stdin.getLines){
val f = interprete(ln)
f.onComplete {
case Success(s) =>
println("future returned: " + s)
case Failure(ex) =>
println(s"interpreter failed due to ${ex.getMessage}")
}
}