我有这样的一段代码。我可以在repl中运行它,但无法从命令行中运行。
我猜测我有一个惰性求值问题。
; items.clj
(def items (ref []))
(defn init-items []
(map
#(dosync
(alter items conj %))
["foo" "bar" "baz" ] ))
(init-items)
(println (first @items))
$ java -jar clojure.jar items.clj
$ nil
致敬。
dorun
更适合使用(doall
会保留它所包装的序列的头并返回它,而dorun
则逐步丢弃它并最终返回nil
-- 因此更适合于有副作用的代码)。 - Michał Marczykdoseq
是惰性的,但看了API后发现我错了。 - Carl Smotricz