2

を介してクラス (オブジェクトではない) を生成したいのですがproxy、クラスは後でインスタンス化されます。

私が見つけた Clojure のプロキシ メソッドの例は、最も一般的な Java 内部クラスのシナリオ、つまりインスタンスを作成するためにクラスを定義するだけの場合を主に扱っているようです。

私の場合、真のクラス (後でロードできるクラス) を定義したいと考えていますgen-class

それはまったく可能でしょうか?それともgen-class要件ですか?

4

1 に答える 1

1

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

于 2012-11-13T01:40:41.730 に答える