SBT,println和scala控制台应用程序的奇怪问题

时间:2013-05-30 18:28:58

标签: scala io console-application sbt

当我运行我的scala代码(我正在使用SBT)时,在输入如下所示的文本后显示提示:

C:\... > sbt run
[info] Loading project definition [...]
[info] Set current project to [...]
Running com[...]
test
>>





exit
>> >> >> >> >> >> [success] Total time[...]

似乎它正在堆叠 print()语句,并且仅在运行不同命令时显示它们。

如果我使用 println()它可以正常工作(除了我不想换行)

代码:

...
  def main(args:Array[String]) {
    var endSession:Boolean = false
    var cmd = ""
    def acceptInput:Any = {
      print(">> ")
      cmd = Console.readLine
      if (cmd != "exit") {
        if (cmd != "") runCommand(cmd)
        acceptInput
      }
    }

    acceptInput
  }
...

这里发生了什么?

1 个答案:

答案 0 :(得分:7)

print(和println)的输出可以缓冲。 Scala通过java.io.PrintStream发送输出,这表明它只会在换行时自动刷新,然后才会询问。但是,它可能依赖于操作系统,因为我的print会立即出现。

如果在每个Console.out.flush之后添加print,则会将缓冲区清空到屏幕上(在任何操作系统上)。