在Clojure中打印原始数组

cha*_*ker 12 clojure pretty-print

我在REPL,我创建了一个java数组:

=> (def arr (double-array [1 2 3]))
Run Code Online (Sandbox Code Playgroud)

当然,如果我想看看我arr,我得到:

=> arr
#<double[] [D@2ce628d8>
Run Code Online (Sandbox Code Playgroud)

有什么我可以做的,会使像java原语的数组打印像clojure的persistentVector

=> arr
[1.0 2.0 3.0]
Run Code Online (Sandbox Code Playgroud)

我知道我可以将我的数组包装在某种漂亮的打印功能中(这是我目前所做的),但这种情况很痛苦,例如,矢量是地图的一部分:

=> my-map
{"1" #<double[] [D@47254e47>, "2" #<double[] [D@11d2625d>}
Run Code Online (Sandbox Code Playgroud)

Sco*_*ott 18

会像以下一样简单吗?

user=> (seq arr)
(1.0 2.0 3.0)
Run Code Online (Sandbox Code Playgroud)

如果它仅用于REPL,那么技术语义也许并不重要.

更新

事实证明,漂亮的print(pprint)可以很好地处理你的矢量图:

user=> (def my-map {"1" (double-array [1 2 3])
                    "2" (double-array [1 2 3])})
#'user/my-map
user=> (pprint my-map)
{"1" [1.0, 2.0, 3.0], "2" [1.0, 2.0, 3.0]}
Run Code Online (Sandbox Code Playgroud)

最终更新:来自评论中链接的Google网上论坛讨论

发问者在下面的讨论中找到了他喜欢的答案:

>有没有办法让Clojure repl默认打印漂亮?

尝试:

(clojure.main/repl :print pprint)

>谢谢!这正是我所需要的.