请在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发表评论

不仅仅是renamekeys,clojure.set中的几个函数在最初看来似乎并不合适。

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

在我的日常工作中,我至少遇到过一次对renamekeys和map-invert的重新实现,因为作者不知道这些函数的存在。

我主张将关系函数和map函数从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报告)
...