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

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

0
Clojure

当前 clojure.core/load-libs 函数将 '(a.namespace.name) 当作前缀列表处理,因此此结构没有任何效果(就好像它是没有后缀的前缀列表)。同时 '(link: a.namespace.name) 会导致调用 require (require 'a.namespace.name')。在其他情况下,require 或 use 函数对 (link: ) 和 () 之间的区别持模糊态度。在这种情况下,存在 no-op 和库加载之间的区别。例如,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报告)
...