我感兴趣的是在 Clojure 中编程时是否可以重新定义或覆盖作为闭包结果的绑定?
例如,我可以很好地执行以下操作:
(defn triple-adder-fn [a b] (fn [x] (+ x a b)))
(def triple-adder (triple-adder-fn 1 2))
(triple-adder 3)
;; => 6
但是,这会创建一个本地闭包,该闭包具有 和 的绑定,a = 1
并且b = 2
当我调用triple-adder
它时会相应地使用它们。
现在的问题是我可以做类似下面的模拟代码来覆盖那些本地绑定吗?
(binding ['a 5
'b 6]
(triple-adder 3))
;; => 14
对于我的简单示例,调用triple-adder-fn
以获取具有新绑定的新函数非常容易。但是,对于我的实际情况,我处于一个我实际上并不控制triple-adder-fn
并且只能访问结果函数的位置。