2024年Clojure状态调查!发表您的想法。

欢迎!请查阅关于页面获取更多在此如何工作的信息。

+1 投票
错误
已关闭

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

(:kw "one" "two" "three") => java.lang.IllegalArgumentException: Wrong number of args passed to keyword: :kw

与调用 Inn,后者会显示传递的参数数量

(name "one" "two" "three") => clojure.lang.ArityException: Wrong number of args (3) passed to: core/name

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

附带的补丁重新使用在其他地方使用的 {{ArityException}} 类,在调用带错误参数数量的关键字时生成后一种形式的错误信息。

解决 CLJ-1067

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

审查: Alex Miller

已有备注: 修复于 1.11.0-alpha2

17 回答

0 投票

评论者: marc

修复错别字: later => latter。

0 投票

由 ataggart 发布的评论:

为改进错误信息获得 +100 分。

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

不太重要的是,由于有三个冒号,生成的句子看起来有点不自然
"传递给关键字的参数个数(3个)错误:关键字::my.ns/foo"

或者
"传递给关键字 :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.throwArtity() 的 0 参数版本存在吗?比如

/**

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

0 投票

由 alexmiller 发布的评论:

是的,也是的

0 投票

评论者: marc

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

0 投票

由 alexmiller 发布的评论:

最后一调用将可变参数作为最后一个参数,因此实际上大于21,而不是21。可以对参数数组进行计数。该补丁也已偏离master,需要重新进行合并。

0 投票

评论者: marc

添加补丁,改善了21 个以上参数的情况的提示信息。

0 投票

评论者: marc

代码中还有另外两个地方在21个以上参数的情况下有相同的错误。

https://github.com/clojure/clojure/blob/71511b7800e18c83377a322f43585a853b303698/src/jvm/clojure/lang/RestFn.java#L4078
https://github.com/clojure/clojure/blob/71511b7800e18c83377a322f43585a853b303698/src/jvm/clojure/lang/AFn.java#L140

您需要另一个补丁来涵盖这些情况吗?

0 投票

由 alexmiller 发布的评论:

当然,不过单独创建一个工单。

0 投票

评论者: marc

亚历克斯,这个工单有什么更新吗?我已经根据您的要求将补丁更新到最新的master,现在应该可以合并。

0 投票
评论人:alexmiller

我会在下次轮班时进行处理。
0 投票
_评论者: marc_

嗨 Alex,

关于这个工单有更新吗?我很担心不得不再次将补丁重基到 master 上。

马克
0 投票

由 alexmiller 发布的评论:

我已经筛查过了,但我不确定我们会将其包含在1.10版本中。如果需要,我会重基,没有太大问题。

...