我是Clojure的新手。我试图在clojure中使用Java hashmap。我正在将Java哈希映射传递给Clojure。该地图是-{0 =果阿,1 =德里,2 =孟买}。当我尝试在此地图上使用clojure函数时,没有得到预期的输出。与此相反,当我遍历此地图时,它给出了预期的输出。
Example
(println(get map 0)) is giving nil
(doseq [[key value] map
(println value)) is giving the expected output.
Output-Goa
Delhi
Mumbai
有人可以请我解释为什么会这样吗?
答案 0 :(得分:1)
您真的应该在Google上找到一些类似的已有答案:Clojure: working with a java.util.HashMap in an idiomatic Clojure fashion
然后您将看到一个简单的答案:
(def data {:a 1 :b 2 :c 3})
(def java-map (java.util.HashMap. data))
(def clj-map (into {} java-map))
这给了我们
java-map => <#java.util.HashMap {:b 2, :c 3, :a 1}>
clj-map => <#clojure.lang.PersistentArrayMap {:b 2, :c 3, :a 1}>
并循环:
(doseq [[k v] clj-map]
(println (format "key=%s val=%s" k v)) )
结果:
key=:b val=2
key=:c val=3
key=:a val=1
答案 1 :(得分:0)
我认为您的问题是您的地图被命名为“地图”,这也是Clojure函数。像这样尝试:
addApps (state, payload) {
state.apps = payload
}
然后它将像这样工作:
state: () => ({
apps: [],
query: '',
loading: false,
filters: [],
loadLimit: 25,
page: 1,
showFilters: true,
currentUser: null,
showLoginModal: false,
showCreateAppModal: false
})
请注意,它仍然返回nil,因为(println)表单之后没有其他内容,但是它确实在映射中打印了0的值,即“ Goa”。
答案 2 :(得分:0)
(def input-map {0 "Goa" 1 "Delhi" 2 "Mumbai"})
(map (fn[[k v]] (print "key " k " value " k)) input-map)
[[k v]]功能允许您访问每个条目的键和值
(map print input-map)
这里的地图条目将作为打印参数传递