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.set 中是有道理的。rename-keys 可能在那里是因为它被两个操作关系的函数所使用。

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