请在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向量包围
libspec或后缀在Clojure列表中

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

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

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