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

欢迎!请参阅关于页面以了解更多关于如何操作的详细信息。

+1
Clojure

当rename-keys位于clojure.set命名空间时,由于它作用在map上而不是在集合上,因此很难找到它。对我来说,即使在阅读代码时,set/rename-keys也看起来很奇怪,但这是引入clojure.set命名空间的首选方法。

这是我在Clojure 2.0中想要看到的一些小瑕疵之一。

9 个答案

+2

评论由:marc 提供

我们不会删除/移动现有的变量,因为这会破坏现有的程序。

根据Gordon的建议,可以通过不删除来解决此问题

可以向{{clojure.core}}添加一个新的变量,命名为{{clojure.core/rename-keys}}。然后,可以将{{clojure.set}}中的{{rename-keys}}变量定义为

(def rename-keys clojure.core/rename-keys)

0

评论由:gordonsyme 提供

不仅仅是{{rename-keys}},还有{{clojure.set}}中几个看似不适宜的函数。

这肯定影响了这些函数的可发现性。

在我白天的工作中,我至少遇到过一次对{{rename-keys}}和{{map-invert}}的重新实现,因为作者不知道这些函数的存在。

我建议将这些关系和映射函数从{{clojure.set}}拆出到它们自己的命名空间中,并在{{clojure.set}}中为向后兼容定义一些变量。
这些兼容性变量可以在1.10中删除。

我很乐意做这件事(或另一种方法),但首先需要从核心团队那里获得对该方法的认可。

0

评论由:bronsa 发布

我认为这种情况几乎不可能发生

0

评论由:alexmiller 发布

我们不会删除/移动现有的变量,因为这会破坏现有的程序。

0

评论由:alexmiller 发布

我知道这一点,这就是为什么我没有关闭问题。我只是说了一个不现实的可能解决方案。

0

评论由:bozhidar 发布

出于好奇——谁知道那些函数如何/为什么会出现于 clojure.set 命名空间中?

附加说明。如果有人决定在命名空间之间创建别名,我建议创建一个 clojure.map 命名空间,而不是将更多内容放入核心。

0

评论由:hiredman 发布

根据其内容,clojure.set 的一个更准确的名称可能是 clojure.relational-algebra,其中定义了关系代数在映射集合上而不是在元组集合上。在这种情况下,一个常见的操作是在映射中重命名键(类似于在 SQL 查询中使用 AS)。这就解释了为什么 rename-keys 出现在 clojure.set 中

0

评论由:jafingerhut 发布

Bozhidar - 只是一种猜测,而不是知识。关系是记录/元组的集合,所以对我来说,关系上的函数在 clojure.set 中有一些道理。rename-keys 可能包含在那里是因为它被两个操作关系的函数所使用。

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