【发布时间】:2013-02-01 03:47:26
【问题描述】:
我有这样的情况:
(defn a []
(do-something))
(defn b []
(let [original (a)]
(modify-original)))
(defn c []
(binding a b)
(a))
如何“打破绑定”并在b 中调用a?我认为闭包可以处理这种情况,所以我写了一些与此类似的东西,但它不起作用:
(defn c []
(let [original-a a
b (fn []
(let [original (original-a)]
(modify-original)))]
(b)))
哦,我差点忘了:代码要复杂得多,因为c 不直接调用b。它在它的子函数中被调用,我无法更改。这就是为什么我不能使用类似的东西:
(defn ^:dynamic state [] (something))
【问题讨论】:
-
为了让它工作,我认为“a”应该被声明为动态的。如果您真的想调用“a”的根值,那么为什么不能在绑定表单之前将a的值复制到另一个var,然后调用它。还是我想念您的用例?
标签: clojure functional-programming