在你的想法中,参与《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

纠正 typo: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-arity版本存在的解释?比如

/** * @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

由:alexmiller 发布的评论

我已经筛选过了,但我不确定我们是否会为1.10查看它。如果需要,我会进行变基,没什么大不了的。

...