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 Leiningen Uberjar与lein run的结果不同_Clojure_Leiningen - Fatal编程技术网

Clojure Leiningen Uberjar与lein run的结果不同

Clojure Leiningen Uberjar与lein run的结果不同,clojure,leiningen,Clojure,Leiningen,我的应用程序在clojure repl或使用leiningen repl运行时运行,但当我使用uberjar创建一个jar并运行应用程序时,它只读取我收集的前2条记录 我追踪到了pmap,所以我创建了pmap的最简单的可能用法,它变得更加复杂。 为什么这样做有效 (ns ktest.core (:gen-class)) (defn -main [] (println (pmap identity (range 20)))) 但不是这个 (ns ktest.core

我的应用程序在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
运行此命令时,它会读取结果,以便打印它们,从而触发评估。在这种情况下,您可以修复此问题,即
doall
dorun
。如果您只需要运行它的打印副作用,请选择
dorun
,如果您需要使用此结果执行某些操作,请选择将结果保存在内存中的
doall

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

有几项因为错误而被打印出来。有关的详细信息,请参阅本Jira版本。

一般来说,我们不应该在pmap等功能中执行任何副作用操作,地图etc@Cubic:因为这些函数是基于FP概念的,因此你应该对你的风险做任何副作用,因为它可能会导致竞争条件之类的问题。我从pmap的副作用中看到的唯一不希望的结果是顺序不一致,一些线程可能会先完成。一般来说,最常见的副作用问题是在
ref
s和
agent
s中使用时会出现多次副作用(有趣的是,在使用refs向代理发送任务时不会发生这种情况)。我不会轻视不一致顺序发生的事情的不良结果。99%的时候,这会让你很难受:-)我做一个pmap来并行检索一堆URL。。。lein run有效,uberjar无效。尝试了doall,但仍然不起作用。。。它甚至不适用于简单映射(当作为uberjar运行时)。