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

欢迎!有关如何使用本页面的更多信息,请参阅关于页面。

+1
错误
关闭

当您使用错误数量的参数调用关键字时,错误信息不会报告传递了多少参数

(: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。

我同意Alexander的评论,应该保留现有的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分支进行合并。

马克
0

由 alexmiller 发布的评论:

我已过筛,但不确定我们是否会将其纳入1.10版本。如果需要,我会进行重置,没问题。

...