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。

我会同意亚历山大的评论,应该保留现有的 throwArity()。

0

评论者:marc

附上更新的补丁。

0

评论者:marc

我已经附上了更新的补丁,该补丁修正了 {{deftest}} 声明中的类型错误,并以亚历山大建议的方式格式化了异常消息。

Alex - 我是否应该添加一个 Java 注释来解释为什么Keyword.throwArity() 的 0 个参数版本存在?例如:

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

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

0

由 alexmiller 发表的评论:

是的,没错

0

评论者:marc

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

0

由 alexmiller 发表的评论:

最终的调用参数包括可变参数,因此实际参数数量是21个以上,而不是21个。可以统计args数组中的参数数量。补丁也偏离了master分支,需要重新变基。

0

评论者:marc

添加了一个补丁,改进了21个以上参数情况下的错误消息。

0
0

由 alexmiller 发表的评论:

当然,但需要单独的工单。

0

评论者:marc

嗨Alex,这个工单有什么更新吗?我已经根据要求将补丁更新为最新的master分支,所以现在应该可以合并了。

0
_由 alexmiller 添加的注释_

我将在下次循环时进行处理。
0
_由 marc_ 添加的注释_

嗨Alex,

这个工单有什么更新吗?我急于避免再次需要重新变基补丁。

马克
0

由 alexmiller 发表的评论:

我已经筛选过了,但我不确定我们会在1.10版本中查看这个。如有需要,我会重新合并,没问题。

...