通常,当我们直接调用 clojure.core/extend(而不是 extend-type、extend-proto 或内联定义)时,这意味着在更上游的级别发生了一定级别的组合,以创建为类型创建原型扩展。
总结一下,今天 extend 的签名如下
([atype & proto+mmaps])
这意味着当被调用时,它的样子是这样的
(extend t protoA {...} protoB {...})
我主张只做如下改变
([atype & {:as proto+mmaps}])
这将允许调用 extend 时传递一个类似于今天的 "unrolled" 映射或一个常规映射(利用 @fogus 的最近补丁)。
(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 ...))
如果考虑这是一个可接受的变化,我很乐意为此提供补丁。