2024 Clojure状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。

0
core.memoize

为了与原子类似,memo-swap! 的当前行为应称为 memo-reset!,因为它会覆盖整个 memo 映射。同样,应该有一个名为 memo-swap! 的函数来执行原子交换操作,以便可以对缓存进行操作,例如添加单个值。

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 报告)
...