2013-02-27 46 views
3

我有一个记录Clojure中在Clojure中,如何获得只有记录实例的记录基础?

(defrecord Animal [name age]) 

,我可以很容易地创建记录的一个实例

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

我还可以创建一个MAP-实例>动物功能

(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

回答

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

+1

一个较长的讨论,谢谢。这非常有帮助。我认为最后一行比'(..(类型my-dog)(getMethod“getBasis”nil)(调用nil nil))'更漂亮一些,但是它的意义是相同的。 – Andrew 2013-02-27 22:43:50