2024 Clojure调查中分享你的想法!

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

+1
Clojure

大家好!我一直在努力理解如何使用记录实现多参数协议方法,所以我想建议对defrecord文档字符串进行改进,使其更清晰。我在想这个改变(新的是最后一段)

(methodname [args*] body)

参数和返回类型可以通过arg和
methodname符号进行提示。如果不提供,将自动推断,因此类型
提示应仅用于消除歧义。

对于多参数方法,为每个方法添加单独的(methodname ...)
条目。

1 答案

0

这不是由声明的语法隐含的吗?因为语法没有声明多参数语法?

来自
由于`defprotocol`使用的是不同的语法,而`fn`、`defn`和`letfn`都使用了另一种不同的语法,所以我觉得不是这样。目前的文档也可能给人一种印象,即无法实现多参数函数(因为它没有明确表示支持它)。
来自
我确信有些人会认为这是明示的,并且对此表示满意。但是,正如你可以从我的建议中看到的,我不是这些足够聪明的人之一,我更喜欢更明确的信息。
来自
哈哈,我刚才在实现basilisp(https://github.com/basilisp-lang/basilisp/pull/930)中的IReduce和IReduceKV时遇到了这个问题。我忘记了如何实现多参数协议,并且不理解为什么`(coll-reduce ([s f] (f)) ([s f init] init))`不对。我甚至检查了文档字符串。直到我看了`clojure/core/protocols.clj`,我才意识到我的错误。
...