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

标签 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
  }
...

这里发生了什么?

最佳答案

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

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

关于scala - SBT、println 和 Scala 控制台应用程序的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843429/

相关文章:

java - 如何在elasticsearch中检索嵌套文档和数组值

scala - Intellij IDEA 和 SBT 语法错误

Scala从for循环返回一个值

scala - Lazy Val - 如何重置值?

C++ - 刷新 std::cout 后没有得到结果

java - 使用 Eclipse 处理 Java 时出现 FileNotFoundException

输入类型中的 PhP 命名空间

C#控制台应用程序无法调试,很奇怪

firefox - 如何通过命令行应用程序获取 Firefox 中打开的选项卡列表?

c# - 作为计划任务运行时,用户配置文件路径返回默认值