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

欢迎!请参阅 关于 页面了解更多关于其工作方式的信息。

+6
协议
重新标记

通常,当您直接调用 clojure.core/extend(与 extend-type、extend-proto 或内联定义相比)时,这意味着您在类型的 proto 扩展方面已经发生了一定程度的组合。

总结一下,今天 extend 的签名如下

([atype & proto+mmaps])

这意味着调用它的样子是

(extend t protoA {...} protoB {...})

我建议只更改它为

([atype & {:as proto+mmaps}])

这将允许调用 extend 的人传递像今天一样的 "未展开" 映射,或传递一个普通映射(利用 fogus 的 recent patch)。

(extend t {protoA {...} protoB {...}}) 和 (extend t protoA {...} protoB {...}) 将得到支持。

当您有一个融合实现结果的 proto+mmaps 时,今天的替代方案类似于

(apply extend t (into [] cat proto+mmaps))

该补丁将允许进行类似以下操作

(extend t (merge proto-impl-a proto-impl-b proto-impl-c ...))

如果这个改变被认为是可接受的,我很高兴提供这个补丁。

1 个答案

0

https://clojure.atlassian.net/browse/CLJ-2756(更通用的问题描述)的身份登录。

...