副作用何时发生?

时间:2015-04-12 22:17:59

标签: clojure functional-programming

我正在构建一个阻止HTTP调用的应用。我想在阻止之前打印一些内容,然后在阻塞调用完成后再继续操作。我的第一次尝试就是这样做

(print "Processing " item-hash "...")
(query-item item-hash)
(Thread/sleep 10000)
(println "Done")))

睡眠只是为了减慢速度,100%确定它能做到它应该做的事情。

根据我的理解,它应该打印消息,启动query-item,然后睡10秒并在此之后打印Done。但是目前它一直等到整个父母sexpr完成并在那之后打印(在完成所有阻塞调用时打印整行。

整个主要参考

(defn -main [& echo]
  (map
    (fn [url]
      (let [item-hash (market-listing-url-to-hash-name url)]
        (print "Processing " item-hash "...")
        (query-item item-hash)
        (Thread/sleep 10000)
        (println "Done")))

    (collect-urls 1)))

由于

1 个答案:

答案 0 :(得分:1)

显然print没有自动将缓冲区刷新到屏幕上。在第一个(flush)修复后添加printprintln自己冲洗它。

源代码:println调用prn函数(flush)作为副作用之一prn