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

欢迎!请参阅关于页面以获取更多关于这如何工作的信息。

+1
错误
已关闭

当您以错误的参数数量调用关键字时,错误信息不会报告传递了多少个参数

(: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 - 我是否应该在0个参数版本的Keyword.throwArity()上添加Java注释来解释其存在的原因?例如:

/** * @deprecated CLJ-2350 此函数已不再调用,但仍未删除以维护公共接口。 */

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

0

评论者:alexmiller

是的,是的

0

评论者:marc

已添加补丁,使{{throwArity(int)}}变为包私有,并添加了弃用文档字符串。

0

评论者:alexmiller

最后的调用以可变参数作为最后一个参数,因此实际上是21+,而不是21。可以计算参数数组。补丁也已经偏离主分支,需要进行变基。

0
by

评论者:marc

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

0
by
0
by

评论者:alexmiller

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

0
by

评论者:marc

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

0
by
评论者:alexmiller

我会在下一次循环时处理这个问题。
0
by
评论者:marc_

嗨Alex,

这个工单有什么更新吗?我急于避免再次对主分支进行变基。

Marc
0

评论者:alexmiller

我已经筛选过了,但我不确定我们会为1.10查看它。如果需要,我会重新base,无关紧要。

...