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() 是一个公共方法,移除它可能会导致外部代码出现故障。

其重要性较低,生成的句子因有三个冒号而显得有些不自然
"调用时传递的参数数量不正确(3): 关键字::my.ns/foo"

或者
"调用时传递的参数数量不正确(3): 关键字 :my.ns/foo"
"调用时传递的参数数量不正确(3): :my.ns/foo"

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

0

评论者为:alexmiller

此外,实际上测试中有一个拼写错误,artity-exceptions。

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

0

评论者:marc

附上更新的补丁

0
已回答

评论者:marc

我已经添加了更新的补丁,该补丁修复了{{deftest}}声明中的类型错误,并按亚历山大建议的方式格式化异常信息。

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

/** @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分支。

Marc
0

评论者为:alexmiller

我已经筛选过了,但我不确定我们是否会为1.10查看它。如果需要,我会重新合并,没什么大不了的。

...