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

欢迎!请参阅“关于”页面了解更多有关本站如何运作的信息。

0
Clojure

当前函数 clojure.core/load-libs 将 '(a.namespace.name) 作为前缀列表处理,所以这种结构没有任何作用(就像是一个不带后缀的前缀列表)。同时 '(link: a.namespace.name) 导致调用 require (require 'a.namespace.name')。在其他情况下,require 或 use 函数对 (link: ) 和 () 的区别是模糊的。在这种情况下,空操作和库加载之间存在差异。例如,Clojure 校验工具 Eastwood 包含适用于这种情况的规则,因为 (require '(a.namespace.name)) 的行为并不明显。

建议的更改可以避免 require 或 use 调用中的这种特殊情况(包括由 ns 宏展开引起的)。接受列表和向量的库规范使行为一致,并类似于前缀列表中处理后缀项的方式。

补丁是最小的,以避免在 clojure/core.clj 中重新排序 sequential? 函数。
我应该包括对这些情况的测试吗?

2 答案

0

评论者:petrglad

如果将前缀列表表示为 Clojure 列是有意的,并且 list-for-prefix,vector-for-libspec-or-suffix 应该是区分性特征,那么在以下情况下应引发错误:
前缀列表被 Clojure 向量包围
库规范或后缀位于 Clojure 列表

如果向后兼容性很重要,那么至少可以在 ':verbose' 模式下写入警告。

如果前缀列表为空,也应引发错误或警告。

0
参考资料:https://clojure.atlassian.net/browse/CLJ-1628(由 alex+import 报告)
...