2024年Clojure现状调查!中分享你的想法。

欢迎!请查看关于页面了解更多有关这个工作方式的信息。

0 投票
core.memoize

为了让memo-swap!的行为能够与atoms类似,应该将当前的行为称为memo-reset!,因为它会覆盖整个memo映射。同样,也应该有一个名为memo-swap!的函数,在memo缓存上进行原子交换操作,这样,例如,您可以向缓存中添加单个值。

2 答案

0 投票
_评论由:seancorfield_发表

这是一个很好的观点!可以通过检查{{(map? base)}}(也许还会给出一个弃用警告?)来保持向后兼容性,但用户必须非常小心,他们会在缓存上操作,而core.memoize将原始值包装在{{IDeref}}实例中,因此一个简单的

(memo-swap! f assoc [42] 99)
 
将不起作用——它需要是

(memo-swap! f assoc [42] (delay 99))

这将使这是API中唯一真正公开这一点的位置。
0 投票
参考:https://clojure.atlassian.net/browse/CMEMOIZE-9(由markengelberg报告)
...