Как написать интерактивную оболочку с поддержкой строки чтения в scala?

Я хочу написать интерактивную оболочку на scala с поддержкой readline (Ctrl-l, клавиши со стрелками, редактирование строки , история и др.).

Я знаю, как это сделать на Python:

# enable support for Ctrl-l, arrow keys, line editing, history, etc.
import readline

finished = False
while not finished:
  try:
    line = raw_input('> ')
    if line:
      if line == 'q':
        finished = True
      else:
        print line
  except KeyboardInterrupt:
    print 'Ctrl-c'; finished = True
  except EOFError:
    print 'Ctrl-d'; finished = True

Я хочу написать простую программу на Scala с точно таким же поведением. Моим ближайшим к настоящему моменту решением является следующий scala:

// used to support Ctrl-l, arrow keys, line editing, history, etc.
import scala.tools.jline

val consoleReader = new jline.console.ConsoleReader()
var finished = false
while (!finished) {
  val line = consoleReader.readLine("> ")
  if (line == null) {
    println("Ctrl-d")
    finished = true
  } else if (line.size > 0) {
    if (line == "q") {
      finished = true
    } else {
      println(line)
    }
  }
}

Открытые вопросы:

  • как обрабатывать ctrl-c?
  • можно ли использовать исключения аналогично python?
  • это оптимально решение или его можно улучшить?
5
задан Pablo Fernandez 27 October 2011 в 12:23
поделиться