我有一个要在 Clojure 中使用的 Java 类。但是,我想将它用作 Clojure map 。这样做需要哪些步骤?
我查看了 IPersistentMap
的代码——Java 类应该实现它吗?还是应该有一些实现协议(protocol)的 Clojure 代码?
我知道我可以只编写一些映射代码,将代码从 Java 对象显式转换为映射,但该解决方案的付出/返回比很高。此外,我可能会多次遇到同样的情况。
具体示例:我有一个用 Java 编写的解析器。我想用它来解析一些文本,然后像在 Clojure 映射中一样访问已解析数据结构的内容:
(def parser (new MyParser))
(let [parse-tree (parser ... parse some text ...)]
((parse-tree :items) "itemid"))
最佳答案
函数bean
想到:
Takes a Java object and returns a read-only implementation of the map abstraction based upon its JavaBean properties.
取自网站的示例:
user=> (import java.util.Date)
java.util.Date
user=> (def *now* (Date.))
#'user/*now*
user=> (bean *now*)
{:seconds 57, :date 13, :class java.util.Date,
:minutes 55, :hours 17, :year 110, :timezoneOffset -330,
:month 6, :day 2, :time 1279023957492}
关于java - 使用 Java 对象作为 Clojure 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916199/