Leiningen Uberjar的不同结果来自lein run

时间:2012-10-16 23:14:09

标签: clojure leiningen

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

我将其追踪到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)))

1 个答案:

答案 0 :(得分:4)

你被“懒惰的小虫”所咬。 pmap创建的序列在读取时将计算结果。当您使用println运行它时,它会读取结果,以便打印它们,从而触发评估。在这种情况下,您可以解决此问题doalldorun。如果您只需要运行它的打印副作用,请选择dorun,如果您需要对此结果执行某些操作,请选择doall将结果保存在内存中。

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

由于chunked sequences而打印了几件商品。有关pmap and chunked sequences的详细信息,请参阅此Jira问题。