这是我的功能
(defn foo
[]
(->> (conj (:countries list1) ;; ["UK" "USA" "IND"]
(:countries list2) ;; ["AUS" "NZ"]
(:countries list3) ;; "FRA"
)
(some-other-operations)))
评论显示了他们获取的数据,我希望我的结果是这样的
["UK" "USA" "IND" "AUS" "NZ" "FRA"]
但我不明白为什么它会给我这样的输出
["UK" "USA" ["AUS" "NZ"] "FRA"]
如果我删除 list2 它工作正常。然后它会产生这样的输出
["UK" "USA" "FRA"]
有人知道我该如何解决这个问题吗?
在我看来,根本问题是不规则的:countries
值类型,在不同情况下是集合或原子。我的建议是确保:contries
永远是收集和使用concat
。如果您无法控制数据类型(这种情况经常发生),我建议使用实用程序串联函数,如下所示:
(defn concat* [& xs]
(reduce (fn [acc x]
((if (sequential? x) into conj) acc x))
[] xs))
user> (concat* ["UK" "USA" "IND"] ["AUS" "NZ"] "FRA")
;;=> ["UK" "USA" "IND" "AUS" "NZ" "FRA"]
至于我,我不鼓励使用flatten
在生产代码中,因为当数据类型更改时可能会导致一大堆错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)