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

欢迎!请参阅关于页面以获取有关此功能的更多信息。

+1
错误
已关闭

当你用一个{{Keyword}}调用错误的参数数量时,错误信息不会报告传递了多少个参数

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

与调用一个{{IFn}}进行比较,它会显示传递的参数数量

(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] 是一个公共方法,删除它可能会破坏外部代码。

此外,该句子有三个冒号,看起来有点不自然。
传递给 ":my.ns/foo" 的参数数量(3)不正确

或者
传递给 ":my.ns/foo" 的参数数量(3)不正确
传递给 ":my.ns/foo" 的参数数量(3)不正确

后者与调用非关键字函数时的结果相同
传递给 "my.ns/bar" 的参数数量(3)不正确

0

评论者:alexmiller

实际上,测试中的 typo 错误是 artity-exceptions。

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

0

评论者:marc

附加更新补丁。

0

评论者:marc

我已附加了一个更新补丁,该补丁在 {{deftest}} 声明中修复了类型,并按亚历山大建议的方式格式化了异常消息。

亚历克斯 - 我是否应该添加一个 Java 注释来说明为何存在 0 元素版本的 Keyword.throwArtity()?例如

/** @deprecated CLJ-2350 此函数不再被调用,但尚未删除以保持公共接口。 */

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

0

评论者:alexmiller

是和是的

0

评论者:marc

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

0

评论者:alexmiller

最终的调用以可变参数作为最后一个参数,因此实际上是21+而不是21。可以计数参数数组。补丁已经从主分支偏离,需要重新合并。

0

评论者:marc

添加了一个补丁,提高了21+参数情况下的消息。

0
0

评论者:alexmiller

当然,但是创建一个单独的工单吧。

0

评论者:marc

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

0
评论人:alexmiller_

我将在我下次循环时处理这个。
0
评论人:marc_

嗨Alex,

这个工单有更新吗?我非常希望能避免再次对主分支重新合并补丁。

马克
0

评论者:alexmiller

我已经审查过了,但我不确定我们会把它用于1.10。如果需要,我会重新调整基础版本的。

...