gpt4 book ai didi

performance - memoize 如何与 Clojure 中的绑定(bind)交互?

转载 作者:行者123 更新时间:2023-12-04 02:39:52 25 4
gpt4 key购买 nike

是否 memoize跟踪绑定(bind)的更改,这可能导致返回它存储的计算不正确?

例如,如果我有一个函数 foo ,例如:

(defn foo [bar baz]
...
(let [config-val *config-val*]
...)
)

我包含在绑定(bind)中,因此我可以更改 *config-val* 的值, 内存是否意味着如果我更改 *config-val* 的值,但不是它的参数,它不会重新计算函数的值?相反,它会给我旧配置的功能值(value)吗?

最佳答案

在 Clojure 1.3.0 中 memoize不跟踪重新绑定(bind)。

user=> (def ^:dynamic *x* 5)
#'user/*x*
user=> (def f (memoize #(+ *x* %)))
#'user/f
user=> (f 1)
6
user=> (binding [*x* 6] (f 1))
6
user=> (binding [*x* 7] (f 1))
6

此外,
user=> (binding [*x* 7] (f 3))
10
user=> (f 3)
10
user=> *x*
5

关于performance - memoize 如何与 Clojure 中的绑定(bind)交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8448327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com