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

欢迎!请参阅关于页面获取更多关于这个平台的信息。

+6
协议
重新标记

通常,当我们直接调用 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 ...))

如果考虑这是一个可接受的变化,我很乐意为此提供补丁。

1 答案

0

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

...