【发布时间】:2016-07-05 06:45:48
【问题描述】:
我在 clojure 中使用
声明了一个地图 (def finalMap {})
我在使用 assoc 的函数内将值附加到它,但它们没有附加,映射保持为空。我认为这是由于不可变性,我能否以某种方式使全局映射可变。该函数是递归函数,每次调用该函数时我都会附加值。
(defn func [arg1 arg2]
;(map append inside let)
(dorun (for [i (range 0 index)]
(do
(func(arg1 arg2))))))
你能帮我用正确的方法吗?
【问题讨论】:
-
解决方案是使用答案中提出的
atom。更重要的是你的最终目标是什么?您能否提供该函数将在其中使用的上下文?也许有更好的解决方案,不涉及可变数据。 -
顺便说一句:
(dorun (for [i (range 0 index)] ...可以缩短为(dotimes [i index] ...,而dorun内部的do已过时,因为do*宏的主体在隐式do中进行评估块。 -
其实我刚开始使用 clojure 并且正在将 java 代码转换为 clojure。我以与在 java 中相同的方式实现了此功能。显然,clojure 中必须有一种方法可以在不使用可变映射的情况下做到这一点。
标签: clojure