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

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

0
错误

我尝试在 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报告)
...