代码之家  ›  专栏  ›  技术社区  ›  mvarela

当从uberjar运行时,如何强制计算Clojure中的懒惰seq?[副本]

  •  1
  • mvarela  · 技术社区  · 8 年前

    考虑以下MWE:

    (ns toto.core
    (:gen-class))
    
    (defn write-something [i]
      (spit (str "out-" (str i) ".txt") "Hi there!"))
    
    (defn -main
      "I don't do a whole lot ... yet."
      [& args]
      (dorun (pmap write-something (range 16))))
    

    -main 从REPL中,它按预期工作:它创建文件并返回。然而,如果我创建一个uberjar并运行 java -jar <toto.whatever-standalone.jar> 它将创建文件,但无法退出程序。我怀疑这是懒惰的问题,但不明白为什么 dorun 不像我期望的那样工作。

    1 回复  |  直到 8 年前
        1
  •  4
  •   erdos    8 年前

    在Clojure中 pmap 函数使用 future

    shutdown-agents (dorun ...) 因此线程池被终止。

    (System/exit <status>) 立即关闭应用程序。

    推荐文章