【发布时间】:2017-02-05 16:15:08
【问题描述】:
我正在查看memoize 的来源。
来自像 C++/Python 这样的语言,这部分给我留下了深刻的印象:
(let [mem (atom {})] (fn [& args] (if-let [e (find @mem args)] ...
我意识到memoize 返回一个函数,但是为了存储状态,它使用了一个本地“变量”mem。但是 after memoize 返回函数,外部 let 不应该从作用域中消失。函数怎么还能引用mem。
为什么 Clojure 不删除那个外部变量,它是如何管理变量名的。就像假设一样,我制作了另一个记忆函数,然后memoize 使用了另一个mem。这个名字是不是和之前的mem冲突了?
P.S.:我在想那里一定有很多事情发生,这阻止了这种情况,所以我给自己写了一个更简单的版本,就像 http://ideone.com/VZLsJp 一样,但它仍然像memoize。
【问题讨论】:
-
@Flimzy,感谢您的称赞:D
标签: variables clojure scope memoization