欢迎!请参见关于页面了解更多这个网站的工作原理。
rename-keys函数在clojure.set命名空间中难以查找,因为它作用于地图而不是集合。对我来说,代码阅读时set/rename-keys看起来也很奇怪,但这被认为是引入clojure.set命名空间的首选方式。
这是我想在Clojure 2.0中修复的几个小瑕疵之一。
由marc发表评论
我们将不会删除/移动现有变量,因为这会破坏现有的程序。
根据Gordon的建议,可以通过不删除的方式来解决这个问题。
可以在{{clojure.core}}中添加一个新的变量,名为{{clojure.core/rename-keys}}。然后,将{{clojure.set}}中的{{rename-keys}}变量定义为
(def rename-keys clojure.core/rename-keys)
由gordonsyme发表评论
不仅仅是renamekeys,clojure.set中的几个函数在最初看来似乎并不合适。
这肯定会影响这些函数的可发现性。
在我的日常工作中,我至少遇到过一次对renamekeys和map-invert的重新实现,因为作者不知道这些函数的存在。
我主张将关系函数和map函数从clojure.set中移出,并为向后兼容性在clojure.set中声明一些变量。这些兼容性变量可以在1.10中删除。
我很乐意这样做(或采取其他方法),但希望得到核心团队的初步同意。
评论者:bronsa
我认为这种情况几乎不可能发生
评论者:alexmiller
我知道这一点,这就是为什么我没有关闭这个问题的原因。我只是在陈述一种不太可能出现的解决方法。
评论者:bozhidar
出于好奇——有人知道这些函数如何/为什么出现在 clojure.set 命名空间中吗?
clojure.set
附言:如果有人决定在命名空间之间创建别名,我建议创建一个 clojure.map 命名空间,而不是将更多内容放入核心。
clojure.map
评论者:hiredman
以 clojure.set 的内容为基础,一个更准确的名字可能是 clojure.relational-algebra,它在集合映射而非集合元组上定义了关系代数。在这种情况下一个常见的操作就是在映射中重命名键(类似于在 SQL 查询中使用 AS)。这也解释了为什么 rename-keys 在 clojure.set 中。
评论者:jafingerhut
Bozhidar——这只是猜测,并非知识。关系是记录/元组的集合,所以对我来说,函数在 clojure.set 中是有意义的。rename-keys 可能在那里,因为它被两个操作关系的函数使用。