在Clojure中,如何获得仅包含记录实例的记录的基础?

时间:2013-02-27 21:58:40

标签: clojure record

我在Clojure中有记录

(defrecord Animal [name age])

我可以轻松创建记录的实例

(def my-cat (Animal. "spot" 2))

我还可以使用map-> Animal函数

创建一个实例
(def my-dog (map->Animal {:name "snowy" :age 6 :legs 3}))

创建

#user.Animal{:name "snowy", :age 6, :legs 3}

仅提供Animal的实例,例如my-dog,我如何获得基础?

我知道我可以在Animal上进行静态调用以获得它,就像这样:

(Animal/getBasis)

提供[name age],但如何从my-dog获取此内容?

1 个答案:

答案 0 :(得分:2)

问题似乎在于clojure对静态方法调用的处理。这里有一些代码可以得到你的答案

user=> (defrecord Animal [name age])
user.Animal
user=> (def my-dog (map->Animal {:name "snowy" :age 6 :legs 3}))
#'user/my-dog
user=> (. (. (type my-dog) getMethod "getBasis" nil) invoke nil nil)
[name age]

对此in another SO thread

进行了较长时间的讨论