dictionary - 如何区分 java map 和 clojure map?

标签 dictionary clojure clojure-java-interop

假设我有以下代码:

(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/

相关文章:

python - 如何在 Python 的字典理解中创建值列表

python - 查找大量键 : dictionary vs. NumPy 数组

Clojure:应用或到列表

c# - 枚举案例处理 - 更好地使用开关或字典?

python - 为什么 Django 使用元组的元组来存储静态字典,我应该这样做吗?

java - Clojure 在简单循环与 Java 上的性能真的很差

clojure - 如何将列表打印为不带括号的字符串

java - Clojure:是否可以继承用 :gen-class 定义的类的状态?

clojure - 有位获取功能吗?

java - 将 Clojure 夹在 Java 与 Leiningen 之间