Clojure解构处理哈希映射向量出现类型转换错误如何解决
问题原因
clojure.core/key和clojure.core/val函数的入参要求是 Map 键值对对象(Map$Entry),但你代码中传给这两个函数的m是完整的PersistentArrayMap对象,类型不匹配,所以抛出类型转换异常。- 额外问题:你使用
for遍历执行打印这类副作用操作不合适,for是用于生成惰性序列的构造算子,没有强制消费的情况下内部逻辑不会执行,执行带副作用的遍历应该用doseq。
修正方案
场景1:向量中每个哈希映射都只有1个键值对(和示例一致)
可以先取出每个哈希映射的第一个(也是唯一的)键值对再做处理,参考代码:
(doseq [m my-maps] (let [[my-key-name my-val-name] (first m)] (case my-key-name :a (println "Found key :a with value " my-val-name) :b (println "Found key :b with value " my-val-name))))
场景2:哈希映射可能存在多个键值对,需要遍历所有键值对处理
可以用mapcat把所有哈希映射的键值对拍平成一维序列再遍历:
(doseq [[my-key-name my-val-name] (mapcat seq my-maps)] (case my-key-name :a (println "Found key :a with value " my-val-name) :b (println "Found key :b with value " my-val-name)))
内容的提问来源于stack exchange,提问作者leifericf
相关产品推荐
相关产品推荐

