Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure打印向量的内容_Clojure - Fatal编程技术网

Clojure打印向量的内容

Clojure打印向量的内容,clojure,Clojure,在Clojure中,如何打印向量的内容?(我想象到控制台,通常是为了调试目的)。如果答案可以推广到任何Seq,那就好了 编辑: 我应该补充一点,它应该是一个简单的函数,提供看起来合理的输出,所以每行打印一个项目,这样就可以方便地用于调试目的。我确信有一些库可以做到这一点,但使用库确实似乎有些过分。这对我来说很有用: (defn pr-seq ([seq msg] (letfn [(lineify-seq [items] (apply st

在Clojure中,如何打印向量的内容?(我想象到控制台,通常是为了调试目的)。如果答案可以推广到任何Seq,那就好了

编辑: 我应该补充一点,它应该是一个简单的函数,提供看起来合理的输出,所以每行打印一个项目,这样就可以方便地用于调试目的。我确信有一些库可以做到这一点,但使用库确实似乎有些过分。

这对我来说很有用:

(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)))
示例用法:

(pr-seq [1 2 3])
(pr-seq (take 20 blobs) (str "First 20 of " (count blobs) " Blobs")))

我通常使用
println
。您可能还想尝试其他几种打印功能。请参阅的“IO”部分

这不是Java。只要把它打印出来,看起来就可以了

您还可以使用
clojure.pprint/pprint
漂亮地打印它。这对于大型、复杂的数据结构很有帮助

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


例外:不要打印无限长的惰性结构,比如
(range)
返回的内容——原因很明显。为此,您可能需要编写一些特殊的代码。

此代码至少可以防止文本向右偏远:

(defn pp
  ([n x]
   (binding [pp/*print-right-margin* n]
     (-> x clojure.pprint/pprint)))
  ([x]
   (pp 100 x)))

可以执行此功能的
partial
s来改变宽度

如果您只想打印序列/向量的元素,您可以将
映射到序列/向量,但请确保使用
dorun
强制
map
进行评估:

(dorun (map println [1 2 3 4]))
这也适用于序列:

(dorun (map println '(1 2 3 4)))
使用
apply
执行此操作的另一种方法是使用
println
curry
map
apply
将其应用于序列/向量:

(apply (partial map println) [[1 2 3 4]])
(apply (partial map println) ['(1 2 3 4)])
另一种方法是使用
doseq

(doseq [e [1 2 3 4]]
  (println e))
(doseq [e '(1 2 3 4)]
  (println e))

谢谢你的建议。看来这就是我想要的
print table
是专门用来打印一系列Clojure地图的。如果这就是您拥有的(或可以转换为的),它可能是完美的。我用
print table
替换了我简单的手写表格,但在线程“main”中得到了
异常java.lang.ClassCastException:java.lang.Long不能强制转换为java.util.Map$Entry
prn
在检查clojure对象时几乎总是优于
println
println
使用java的
toString
,它与clojure数据结构有不同的设计目标,因此您可能会得到误导性的输出。例如,
[“abc”]
[abc]
println
无法区分。谢谢@amalloy。我没有意识到这一点。