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

欢迎!请查看关于页面以了解更多关于此功能的信息。

+2
集合
重新标记

核心集合数据结构(列表、向量、映射和集合)都有用于创建它们的可变参数函数:listvectorhash-maphash-set。其中2个具有1参数的函数可以接收一个集合并转换为所需的特定集合类型:vecset。映射和列表没有此类函数。我认为我理解为什么映射没有:在需要成对时,中间没有步骤进行成对转换时,无法将其转换为其他集合类型。

但似乎缺少一个函数,可以接受任何集合类型的单个对象并将其转换为具体的持久化列表。就像这样的简单函数(defn to-list [coll] (clojure.lang.PersistentList/create coll))。为什么会排除这样一个函数?

我提问/想要这样一个函数的原因是我在构建和遍历嵌套数据结构,并且当Clojure核心函数如list*cons以及语法引号等操作“列表”时返回非持久化列表时,这可能会很具挑战性。我自己写了一个to-list,并在必要时将其展现在必要的地方,以便在意识到list*并不适合我的需求后,使我的决策树更加容易。

我知道序列抽象是Clojure思维模式的一个重要组成部分,但Program列表不对我知道的确切有限尺寸的对象返回true使我有些挫败。

我主要想了解对这种函数故意排除的任何推理,但如果核心团队感兴趣,我可以为其添加补丁。

1 答案

+1

选择了
...