我是clojure的新手,在某个时刻我遇到了问题.
我的程序中有这样的代码:
(let [ ... ]
(map (fn [[v f]] (do-side-effect v f)) {:v1 f1, :v2 f2})
(do-the-job ...))
Run Code Online (Sandbox Code Playgroud)
do-side-effect例如,这可以是println另一种副作用功能intern.问题是副作用不会发生.
但是,如果我改变行
(println (map #(fn [[v f]] (do-side-effect v f)) {:v1 f1, :v2 f2}))
Run Code Online (Sandbox Code Playgroud)
一切都好.所以我最后的想法是,clojure只是优化了map因为它认为它的结果是无用的,因为我不使用它.
如果实际发生这种情况,我怎么能显示这种形式可以产生副作用以阻止编译器优化它?
如果它是一个错误,我怎么能找到错误的位置?
clojure ×1