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

我已经附加了一个更新的补丁,该补丁修复了test声明中的类型错误,并格式化了异常信息,如Alexander建议的那样。

亚历克斯 - 我需要在Java旁边添加一条注释来解释关键字版本0-arity的`Keyword throwsArity()`的存在原因吗?例如

/** * @deprecated CLJ-2350 该功能不再被调用,但未删除以维护公开接口。 */

反思公共接口,我们可能会将新功能,{{throwArity(int n)}}, 做为包私有。这会避免它成为`clojure.lang`的公开API的一部分。

0
通过

评论者:alexmiller

是的,是的

0
通过

由:marc

添加了将 {{throwArity(int)}} 做为包私有,并添加文档说明其已过时的补丁。

0
通过

评论者:alexmiller

最后的调用将可变参数作为最后一个参数,所以实际上是21+,而不是21。可以计算参数数组。补丁已从master分叉,需要重新创建。

0

由:marc

添加了补丁,改进了21+参数情况的消息。

0
0

评论者:alexmiller

当然,但是请单独创建工单。

0

由:marc

嗨Alex,这个工单有什么更新吗?我已经按照要求将补丁更新到最新的master版本,所以现在应该可以合并了。

0
评论者:alexmiller

在下一次循环时我会处理的。
0
评论者:marc_

嗨Alex,

这个工单有什么更新吗?我急于避免再次将补丁与master合并。

马克
0
by

评论者:alexmiller

我已筛选,但不确定我们是否会在1.10版本中查看它。如果需要,我将重建,没有什么大不了的。

...