如何在clojure中创建简单的用户提示符



考虑clojure中这个非常简单的函数定义:

(defn prompt []
  (print ">>> ")
  (read-line))

我的目标是让用户输入一个由提示前缀前缀前缀的字符串。然而,read-line似乎在print语句之前执行。但是,通过刷新输出流

(defn prompt []
  (print ">>> ")
  (flush)
  (read-line))

此函数按预期工作。为什么我必须手动冲洗为了">>>"被写出来?根据文档,函数和do应该依次执行表达式

它们按顺序执行。但是执行print并不意味着给定的输出将刷新到*out*变量所指向的任何流。正如文档所说,print函数

将当前值的对象打印到输出流的* *。

默认情况下,*out*指向PrintWriter,通常是System.out的目标。对于PrintWriter实例,默认情况下不启用刷新。但是,您可以通过使用某些构造函数来创建实例来启用自动刷新。

即使这样,对于PrintWriter实例:

如果启用了自动刷新,则仅在调用println、printf或format方法之一时执行刷新,而不是在碰巧输出换行符时执行刷新。

您可以使用println而不是print来理解您的意思:

(defn prompt []
  (println ">>> ")
  (read-line))

不同之处在于(source print)pr的使用,而(source println)prn的使用。查看源代码:

相关内容

  • 没有找到相关文章

最新更新