Clojure:将 println 应用于多个字符串打乱输出

Pat*_*her 1 clojure apply println

在 Clojure 1.11 中,我正在评估这个术语:

(apply println "foo\n" "bar\n" "baz\n")
Run Code Online (Sandbox Code Playgroud)

我期望以下输出:

foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

但是,我得到了这个

foo
 bar
 b a z
Run Code Online (Sandbox Code Playgroud)

第一行是我需要的。第二行包含一个前导空格。第三行每个字母之前有一个多余的空格。

为什么会apply这样println,我怎样才能得到想要的输出?

Eug*_*mov 6

println前导空格来自于打印其参数时添加空格的事实。例如尝试(println 1 2 3)- 你会得到1 2 3输出。

最后一行之所以会出现,是因为您正在使用apply. apply将最后一个参数视为集合,并将其项目作为单独的参数传递给目标函数。apply所以在这种情况下你很可能根本不需要。

为了实现你想要的,你应该使用类似的东西(run! print ["foo\n" "bar\n" "baz\n"])。或者使用println而不是添加\n自己,因为println这对你来说是有用的。