当我在clojure repl或使用leiningen repl中运行它时,我的应用程序将运行,但是当我使用uberjar创建一个jar并运行该应用程序时,它仅读取集合的前2条记录。

我将其跟踪到pmap,因此我创建了pmap的最简单的用法,但它变得更加奇怪。
为什么这项工作

(ns ktest.core
    (:gen-class))
(defn -main []
  (println (pmap identity (range 20))))


但不是这个

(ns ktest.core
        (:gen-class))
    (defn -main []
       (pmap #(println %) (range 20)))

最佳答案

您被“懒虫”咬伤了。 pmap创建一个序列,该序列在读取时将计算结果。当您使用println运行此命令时,它将读取结果,以便可以打印结果,从而触发评估。在这种情况下,您可以将其修复为doalldorun。如果只需要运行它的打印副作用,则选择dorun,如果需要对结果进行某些操作,则选择doall,将结果保存在内存中。

(dorun (pmap #(println %) (range 20)))


由于chunked sequences,一些项目被打印。有关pmap and chunked sequences的详细信息,请参见此Jira问题。

10-08 12:45