を介してクラス (オブジェクトではない) を生成したいのですがproxy
、クラスは後でインスタンス化されます。
私が見つけた Clojure のプロキシ メソッドの例は、最も一般的な Java 内部クラスのシナリオ、つまりインスタンスを作成するためにクラスを定義するだけの場合を主に扱っているようです。
私の場合、真のクラス (後でロードできるクラス) を定義したいと考えていますgen-class
。
それはまったく可能でしょうか?それともgen-class
要件ですか?
Clojure プロトコルを定義してから、そのプロトコルを実装するクラスを作成すると、後で単純なクラスであるインスタンスを作成できます。
(defprotocol myProtocol
(doStuff [this x y])
(getA [this])
(setA [this n]))
(deftype Foo [ ^:unsynchronized-mutable a]
myProtocol
(doStuff [this x y] (+ x y a))
(getA [this] a)
(setA [this n] (set! a n)))
(def a (Foo. 42))
user> (.getA a)
42
user> (.setA a 41)
41
user> (.getA a)
41
user> (.doStuff a 3 4)
48
user> (class a)
user.Foo
作成されたクラスは、呼び出した名前空間と同じ名前のパッケージに入れられますdeftype