我有这样一张地图:
(def a {:a 1, :b 2})
我希望能够重载地图,使一些关键字执行函数,以便实现以下目标:
(c: a)
能够执行函数,这是可能的吗?
更新:
我意识到我可以做类似于以下的事情:
(def a {:a (fn[] 1) :b (fn[] 2) :c (fn[] x)})
:and:
((c: a))
但是我必须将我现有的所有地图条目都转换为函数。
我希望每次都重新评估函数。例如,当我执行以下操作时:
(def ab{:a 1 :b 2 :c ( #(.nextInt (java.util.Random.) 1000))})
(str (:c ab) " " (:c ab) " " (:c ab))
I get:
61 61 61
更新 2
我考虑了所给答案并意识到他是正确的,我应该只使用不可变的结构。最终的解决方案是创建一个“enrich”函数来按需创建动态属性。
不再使用三个不同的数字。
(def a {:a 1, :b 2})
我希望能够重载地图,使得一些关键词能够执行函数,以此来实现:
(str (:c (enrich ab)) " " (:c (enrich ab)) " " (:c (enrich ab)))
每次运行都会产生不同的数字,如下所示:
58 639 710