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
by

评论由:bronsa发表

我认为这几乎不可能发生

0
by

评论由:alexmiller发表

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

0
by

评论由:alexmiller发表

我知道这一点,这就是为什么我没有关闭这个问题。我只是陈述一个可能的解决方案,该方案已不在讨论范围之内。

0
by

评论由:bozhidar发表

出于好奇——有人知道这些函数是如何以及为什么出现在clojure.set命名空间中的吗?

顺便提一下,如果有人决定在命名空间之间创建别名,我建议创建一个clojure.map命名空间,而不是将更多内容添加到核心库。

0
by

评论由:hiredman发表

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

0
by

评论由:jafingerhut发表

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

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