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 回答