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

欢迎!请访问 关于 页面以获取更多关于这个网站的工作方式的信息。

+1
错误
已关闭

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

(:kw "one" "two" "three") => java.lang.IllegalArgumentException: 错误的参数数量传递给关键词::kw

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

(name "one" "two" "three") => clojure.lang.ArityException: 错误的参数数量(3)传递给: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

实际上,测试中的一个拼写错误是 artity-exceptions。

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

0

评论者:marc

附加了更新的补丁。

0

评论者:marc

我已经附加了一个更新的补丁,它修复了 {{deftest}} 声明中的类型错误,并按照亚历山大提出的格式化了异常消息。

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

/**

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

0

评论者:alexmiller

是的,没错

0

评论者:marc

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

0

评论者:alexmiller

最后的调用接收可变参数作为最后一个参数,所以实际上是21+,而不是21。可以计算参数数组。修补程序已从master分支偏移,需要进行重新基础化。

0
by

评论者:marc

添加了修补程序,用于改进21+参数情况的消息。

0
by
0
by

评论者:alexmiller

当然,但这是一个单独的工单。

0
by

评论者:marc

嗨Alex,这个工单有任何更新吗?我已按您的要求将修补程序更新到最新的master分支,所以现在应该可以合并了。

0
by
_由 alexmiller 发表的评论_

我会在下次循环时处理。
0
by
_由 marc_ 发表的评论_

嗨Alex,

这个工单有什么更新吗?我很担心再次需要重新对master分支进行修补程序。

马克
0

评论者:alexmiller

我已经检查过了,但不清楚我们是否会看1.10版本。如果有需要,我会重新重新设置,不是什么大问题。

...