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

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

+1 支持
错误
已关闭

当您使用错误的参数数量调用 <{{Keyword}} > 时,错误信息不会报告传递了多少个参数

(:kw "one" "two" "three") => java.lang.IllegalArgumentException: 向关键词 :kw 传递了错误的参数数量

与调用一个 {{IFn}} 对比,后者显示了传递的参数数量

(name "one" "two" "three") => clojure.lang.ArityException: 向 core/name 传递了错误的参数数量(3)

后者错误信息更清晰,更容易调试。

附带的补丁重新使用了在其它地方用于生成错误信息的 {{ArityException}} 类,以便在调用关键词时因参数数量不正确而生成这种形式的错误信息。

解决了 CLJ-1067 问题

补丁: keyword-arity-exception-03.patch

审核者: Alex Miller

以如下说明关闭: 在 1.11.0-alpha2 中修复

17 个答案

0 支持

评论者:marc

修复拼写错误:later => latter。

0 支持

评论者:ataggart

对改进错误信息给出+100分。

尽管可能性不大,因为 throwArity() 是一个公共方法,移除它可能会破坏外部代码。

不那么重要的是,包含三个冒号的结果句子看起来有点不自然。
"向:关键词: :my.ns/foo 输入了错误数量的参数(3)"

或者
"向:关键词 :my.ns/foo 输入了错误数量的参数(3)"
"向:my.ns/foo 输入了错误数量的参数(3)"

后者与调用非关键词函数的结果类似。
"向:my.ns/bar 输入了错误数量的参数(3)"

0 支持

评论者:alexmiller

此外,实际上在测试中有一个拼写错误,artity-exceptions。

我同意Alexander的评论,应该保留现有的throwArity()。

0 支持

评论者:marc

附带更新补丁。

0 支持

评论者:marc

我已附上一个更新补丁,该补丁修复了 {{deftest}} 声明中的类型,并按照Alexander建议的方式格式化异常信息。

Alex - 我是否需要在Java注释中解释为什么Keyword.throwArtity()的0参数版本存在?例如:

/** * @deprecated CLJ-2350 该函数不再被调用,但没有删除以保持公共接口。 */

反思公共接口,我们或许可以使新的函数,{{throwArity(int n)}}, 成为包私有。这将避免使其成为{{clojure.lang}}的公共API的一部分。

0 支持

评论者:alexmiller

是的,是的

0 支持

评论者:marc

添加了补丁,将{{throwArity(int)}}设置为包私有,并添加了文档字符串。

0 支持
by

评论者:alexmiller

最终的调用将可变参数作为最后一个参数,所以实际上是21+,而不是21。可以计数参数数组。这个补丁也已从master分支漂移,需要重新合并。

0 支持
by

评论者:marc

添加了一个补丁,改进了21+参数情况的错误信息。

0 支持
by
0 支持
by

评论者:alexmiller

当然,但请在独立的票据下。

0 支持
by

评论者:marc

哈喽亚历克斯,这个工单有什么更新吗?我已经按照请求更新了补丁到最新的master,因此现在应该可以合并了。

0 支持
by
_由axemiller发表的评论_

我下次循环时会处理。
0 支持
by
_由marc发表的评论_

哈喽亚历克斯,

关于这个工单有更新吗?我急于避免再次重新合并补丁到master。

马克
0 支持

评论者:alexmiller

我已经进行了筛选,但我不确定我们会为1.10查看它。如果需要,我会重新分支,没什么大不了的。

...