假设我有以下代码:
(def m1 (java.util.HashMap.))
(def m2 (java.util.LinkedHashMap.))
(def m3 {})
我需要一个函数来检测来自 java 的 map ,例如:
(map java-map? [m1 m2 m3]) ;; => (true true false)
开箱即用的东西?
最佳答案
您可以使用 map?
检查某些东西是否实现了IPersistentMap
这对于 Clojure 映射是正确的,但对于 java.utils.*
则不然 map :
(map? (java.util.HashMap.)) ;; => false
(map? (java.util.LinkedHashMap.)) ;; => false
(map? {}) ;; => true
更准确地说,您应该检查给定对象是否满足某些要求(例如,是持久的、不可变的/可变的 -
map?
将回答该特定问题)。没有简单的方法来判断您是否获得了 map 的 Java 实现,因为您可以从外部库中获得任何其他实现,这些实现可能具有 java.util.Map
的自定义实现或从 java.util
扩展具体实现之一包裹。
关于dictionary - 如何区分 java map 和 clojure map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36626826/