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报告)
...