【发布时间】:2011-04-07 15:45:36
【问题描述】:
我有一张这样的地图:
(def a {:a 1, :b 2})
:我希望重载地图,以便某些关键字执行功能,以便:
(c: a)
可以执行一个函数。这可能吗?
更新:
我确实意识到我可以这样做:
(def a {:a (fn[] 1) :b (fn[] 2) :c (fn[] x)})
:和:
((c: a))
:但是我必须将每个现有的地图条目转换为一个函数。
我希望每次都“重新评估”函数。例如,当我这样做时:
(def ab{:a 1 :b 2 :c ( #(.nextInt (java.util.Random.) 1000))})
(str (:c ab) " " (:c ab) " " (:c ab))
我明白了:
61 61 61
而不是三个不同的数字
更新 2
我考虑了给出的答案并意识到他是对的,我应该只使用不可变结构。我想出的最终解决方案是拥有一个“丰富”功能,可以按需创建动态属性。
(def a {:a 1, :b 2})
:我希望重载地图,以便某些关键字执行功能,以便:
(str (:c (enrich ab)) " " (:c (enrich ab)) " " (:c (enrich ab)))
每次都会产生不同的数字,如下所示:
58 639 710
【问题讨论】:
标签: clojure