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

修复打字错误:latter → latter。

0

评论者:ataggart

+100 分,赞比亚改进错误信息。

尽管可能性不大,但由于throwArity()是一个公开方法,删除它可能会破坏外部代码。

其次,由于有三个冒号,生成的句子看起来稍微有些尴尬
“传递给的关键字参数数量不正确(3):keyword: :my.ns/foo”

或者
“传递给的关键字参数数量不正确(3):keyword :my.ns/foo”
“传递给的关键字参数数量不正确(3)::my.ns/foo”

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

0

由 alexmiller 发布的评论

此外,实际上在测试中有一个输入错误:artity-exceptions。

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

0

评论者:marc

附上更新后的补丁。

0

评论者:marc

我上传了一个更新后的补丁,它修复了{{deftest}}声明中的类型错误,并按亚历山大建议的方式格式化了异常消息。

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

/**

从公共接口的角度来看,也许我们可以使新功能,{{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。如果需要,我会重新提取,不会有太大问题。

...