通常,当您直接调用 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 ...))
如果这个改变被认为是可接受的,我很高兴提供这个补丁。