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

欢迎!请参阅关于页面了解有关此工作的更多信息。

+1 投票
Clojure

rename-keys位于clojure.set命名空间中时很难找到,因为它作用于映射而不是集合。当阅读代码时,看起来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 中放在 clojure.set 中是有一定道理的。rename-keys 函数可能在那里是因为它被操作关系的一些函数所使用。

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