2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取更多关于这个工作的信息。

+1 投票
Clojure

当rename-keys存在于clojure.set名称空间时,由于其作用于map而不是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}}的重新实现,因为作者不知道这些函数的存在。

我主张将这些关系函数和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

波扎尔 - 只是一种猜测,并非知识。关系是一系列记录/元组,因此在 clojure.set 中对关系的操作有意义。rename-keys 可能存在,因为它是两个操作关系的函数所使用的。

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