gpt4 book ai didi

clojure 行为 (into {} '(( :a :b) (:c :d)))

转载 作者:行者123 更新时间:2023-12-05 04:13:26 24 4
gpt4 key购买 nike

user=> (into {} '((:a :b) (:c :d)))

抛出:ClassCastException clojure.lang.Keyword cannot be cast to java.util.Map$Entry clojure.lang.ATransientMap.conj (ATransientMap.java:44)

鉴于:

user=> (into {} (list [:a :b] [:c :d]))

很好。这是一个奇怪的区别,因为很多时候其他函数在必须以向量开头的东西时返回列表:

user=> (into {} (partition 2 (interleave [:a :b] [:c :d])))

将抛出,因为它 partition 2 ...) 导致 ((:a :c) (:b :d))。所以这很烦人。你基本上必须记住方法的返回类型和函数的特定行为,如 into,或者你必须让东西爆炸并在你找到它时用 (进入 {} (map vec (partition 2 (interleave [:a :b] [:c :d]))))

into 不喜欢将这些对作为列表有什么具体原因吗?

最佳答案

原因如您所述,只能使用向量对来构建 map 。我不知道存在此限制的实际原因。但是还有其他几种构造 HashMap 的方法。如果您发现自己正在使用分区,也许答案是使用替代构造方法。

如果您有键和值的并行序列:

(zipmap [:a :c] [:b :d])

如果您的所有项目都按平面顺序排列:

(apply hash-map [:a :b :c :d])

从序列构建 map :

(into {} (for [[k v] xs]
[k (transform v)]))

关于clojure 行为 (into {} '(( :a :b) (:c :d))),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37689961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com