相关疑难解决方法(0)

副作用优化了

我是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

2
推荐指数
1
解决办法
75
查看次数

标签 统计

clojure ×1