2024年Clojure调查问卷中分享你的想法!

欢迎!请参阅关于页面获取更多关于如何使用本站的信息。

+1 投票
Clojure

当rename-keys位于clojure.set命名空间时,它作用于map而非集合,因此很难找到。在阅读代码时,set/rename-keys看起来也比较奇怪,但这确实是引入clojure.set命名空间的首选方式。

这是我希望在clojure 2.0中修复的一些小问题之一。

9 个答案

+2 投票

评论者:marc

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

根据Gordon的建议,可以用一种不需要删除的方法解决这个问题

可以新增一个名为{{clojure.core/rename-keys}}的变量到{{clojure.core}}。然后,在{{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 提出)
...