2024 状态 Clojure 问卷调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解有关此功能的更多信息。

0
Errors

我试图在 defprotocol 方法签名中使用 &。显然(见下文),这被编译成将 & 变成简单的参数名,并且没有特殊处理可变数量的参数。我认为应该在协议签名中使用 & 检测并立即抛出异常(我认为这种对签名的限制应该被文档化;尽管我在当前的文档中找不到指定,但它当然是通过 defprotocol 创建 Java 接口的事实隐含的)。

user=> (defprotocol Applier (app (link: this f & args)))
Applier
user=> (deftype A (link: ) Applier (app (link: _ f & args) (prn f & args) (apply f args)))
user.A
user=> (app (A.) + 1 2)

<core$PLUS clojure.core$PLUS@5d9d0d20> 1 2

IllegalArgumentException 无法从 java.lang.Long 创建 ISeq
clojure.lang.RT.seqFrom (RT.java:487)

16 答案

0
参考: https://clojure.atlassian.net/browse/CLJ-888 (由 glchapman 报告)
...