Leiningen Uberjar lein run的不同结果

我的应用程序运行时,我在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)))

由于分块序列,一些项目会打印出来。 有关pmap和分块序列的详细信息,请参阅此Jira问题。

链接地址: http://www.djcxy.com/p/51731.html

上一篇: Leiningen Uberjar different results from lein run

下一篇: Leiningen has problems building a working uberjar