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

欢迎!请查看《关于》页面了解有关操作的一些更多信息。

+1
错误
已关闭

当您用错误数量的参数调用关键字时,错误消息不会报告传递了哪些参数

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

其次,生成的句子有点不自然,有三个冒号
"传入参数数量错误(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}}声明中的类型错误,并按照亚历山大建议的格式化异常信息。

艾克斯 - 我是否应该在Keyword.throwArtity()的0个参数版本上添加Java注释来解释其存在的原因?例如:

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

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

0
_由alexmiller发布评论_

下次循环中我会处理。
0
_由marc_发布评论_

Hi Alex,

关于这个工单有什么更新吗?我急于避免再次重新合并补丁到主分支。

Mark
0

评论者:alexmiller

我已经筛选了,但我不确定我们会在1.10版本中检查它。如果需要,我会进行rebase操作,这不是什么大问题。

...