3

当我在 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)))
4

1 回答 1

4

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

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

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

于 2012-10-16T23:46:12.037 回答