2024 年 Clojure 调查中分享您的想法!

欢迎!请在 关于 页面了解一些有关其工作方式的信息。

+1

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

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

不太重要的是,带有三个冒号的句子看起来有点笨拙。
"传递给 :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}} 声明中的类型错误,并按照 Alexander 建议的方式格式化了异常信息。

Alex - 我应该在 Java 注释中添加说明为什么Keyword.throwArity()的0参数版本存在吗?例如

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

嗨,Alex,这个工单有什么更新吗?我已经根据要求将补丁更新到了最新的master,现在应该可以合并了。

0
评论者:alexmiller_

下次我循环时我会处理这件事。
0
评论者:marc_

嗨,Alex,

这个工单有什么更新吗?我急于避免再次重新集成此补丁与master分支。

Marc
0
by

评论者:alexmiller

我已经筛选过了,但我不确定我们会为 1.10 修改它。如果需要,我会重新建立,没有太大问题。

...