Clojure打印矢量的内容

Chr*_*phy 4 clojure

在Clojure中,如何打印矢量的内容?(我想到了控制台,通常用于调试目的).如果答案可以推广到任何好的Seq.

编辑: 我应该补充一点,它应该是一个简单的函数,它提供看起来合理的输出,因此每行打印一个项目 - 因此可以很容易地用于调试目的.我确信有些库可以做到这一点,但使用库确实看起来有点过分.

Mar*_*ars 5

我经常使用println.您可能还想尝试其他几种打印功能.请参阅Clojure备忘单的"IO"部分.

这不是Java.只需打印它,它看起来不错.

您也可以使用clojure.pprint/pprint漂亮的打印方式.这对于大型复杂的数据结构很有帮助.

这些方法适用于所有基本的Clojure数据结构.

例外:(range)由于显而易见的原因,不要打印无限长的懒惰结构,例如返回的结构.为此,您可能需要编写特殊代码.

  • `prn`几乎总是比'println`更好地检查clojure对象.`println`使用java的`toString`,它具有与clojure数据结构不同的设计目标,因此您可以获得误导性输出.例如,`["ab c"]`和`[abc]`与`println`无法区分. (3认同)

Chr*_*phy 3

这对我有用:

(defn pr-seq
  ([seq msg]
   (letfn [(lineify-seq [items]
                        (apply str (interpose "\n" items)))]
     (println (str "\n--------start--------\n"
                   msg "\nCOUNT: " (count seq) "\n"
                   (lineify-seq seq) "\n---------end---------"))))
  ([seq]
    (pr-seq seq nil)))
Run Code Online (Sandbox Code Playgroud)

用法示例:

(pr-seq [1 2 3])
(pr-seq (take 20 blobs) (str "First 20 of " (count blobs) " Blobs")))
Run Code Online (Sandbox Code Playgroud)