我有一个问题,我的项目在Cider中运行,但没有lein run.
请考虑core.clj中的这些函数:
(def my-vec ["a" "b" "c"])
(defn dostuff [x] (spit "/home/dirty/file.txt" x :append true))
(defn -main [& args] (map dostuff my-vec))
Run Code Online (Sandbox Code Playgroud)
现在,当我打开Cider repl并输入时(-main),这将运行file.txt并将包含"abc ...".但是,如果我使用终端进入项目并运行lein run它运行一会儿然后关闭.但是file.txt没有写到.我在俯瞰什么?
map是一个懒惰的序列,它不是为了副作用.如果你想强制实现懒惰的序列,你需要包装你map的doall.您不应该首先使用map,因为您不关心结果序列.见doseq:
(doseq [x my-vec] (dostuff x))
Run Code Online (Sandbox Code Playgroud)