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

tsj*_*nsn 3 io scala console-application sbt

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

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





exit
>> >> >> >> >> >> [success] Total time[...]
Run Code Online (Sandbox Code Playgroud)

看起来它正在堆叠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
  }
...
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Rex*_*err 7

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

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