我想通过 生成一个类(不是对象)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