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命名空间中吗?

PS. 如果有人决定在命名空间之间创建别名,我建议创建一个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](https://clojure.atlassian.net/browse/CLJ-1820)(由alex+import报告)
...