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 に答える