在clojure中的全局映射中附加值

时间:2016-07-05 06:45:48

标签: clojure

我使用

在clojure中声明了一张地图
             (def finalMap {})

我在使用assoc的函数内附加值但它们没有附加,地图保持为空。我认为这是由于不变性,我可以通过某种方式使全局映射变为可变。函数是递归函数,每次调用函数时我都会附加值。

          (defn func [arg1 arg2]
            ;(map append inside let)
            (dorun (for [i (range 0 index)]
              (do
                (func(arg1 arg2))))))

你能用正确的方法帮助我吗?

1 个答案:

答案 0 :(得分:1)

如果你想要可变地图那么你应该创建一个原子:

(def final-map (atom {})) 

通常您也会使用assoc为其添加更多键值对。但是,您需要使用swap!才能调用assoc

(swap! final-map assoc :a "a value")

这将添加一个键/值对,其中键是关键字:a,值是字符串“a value”。

查看其他examples of using assoc可能会有所帮助。要意识到上面的代码assoc正在使用{em>旧值final-map作为其第一个参数进行调用,并返回 new 值{ {1}}。