Clojure中的地图打印与地图打印

Clojure中的地图打印与地图打印,clojure,nrepl,Clojure,Nrepl,我想知道为什么在一个nREPL中,下面的代码有不同的输出顺序 (map println [1 2 3]) Result: 1 2 3 (nil nil nil) 对 (map print [1 2 3]) Result: (nil nil nil)123 为什么应用print显示返回值,然后显示123?实际上,如果多次运行第二个命令,您可能会看到不同的顺序打印不打印任何换行符,因此不会刷新输出缓冲区。你也可以很好地看到: Result: 123(nil nil nil) 我想第一个示例

我想知道为什么在一个nREPL中,下面的代码有不同的输出顺序

(map println [1 2 3])

Result:
1
2
3
(nil nil nil)

(map print [1 2 3])

Result:
(nil nil nil)123

为什么应用print显示返回值,然后显示123?

实际上,如果多次运行第二个命令,您可能会看到不同的顺序<代码>打印不打印任何换行符,因此不会刷新输出缓冲区。你也可以很好地看到:

Result:
123(nil nil nil)

我想第一个示例也可能改变顺序,但是REPL在默认情况下将换行符上的
*flush*
设置为
true

它看起来很像输出流缓冲的结果

您可以通过调用以下命令强制打印输出流缓冲区中的所有数据:

(defn打印![&args]
(应用打印参数)
(齐平)
(地图打印![1 2 3])
; => 123(零零零零)

还要注意的是,这在REPL中起作用,在您需要使用的代码中,
(dorun)
,因为map生成一个延迟序列,
dorun
实际上强制打印:

(dorun (map print [1 2 3])) ;=> 123

您也可以使用以下表单打印数组:(print(apply str[1 2 3]))