4

我在 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

4

1 回答 1

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]

在另一个 SO 线程中对此进行了更长的讨论

于 2013-02-27T22:28:15.060 回答