2012-11-12 2 views
2

proxy을 통해 클래스 (객체가 아님)를 생성하려고하고 클래스가 나중에 인스턴스화됩니다."클래스"를 프록시에서 없애려면 어떻게해야합니까?

Clojure의 프록시 메소드에서 발견 한 예제는 가장 일반적인 자바 내부 클래스 시나리오를 주로 처리하는 것처럼 보입니다. 즉, 클래스를 정의하기 위해 클래스를 정의 할 때입니다.

제 경우에는 진정한 클래스를 정의하고 싶습니다. 나중에로드 할 수있는 클래스를 정의하고 싶습니다. 그러나 gen-class의 복잡도를 사용하여 컴파일하지 않고 정의하고 싶습니다.

그럴 가능성이 있습니까? 아니면 gen-class 요구 사항입니까?

답변

1

Clojure Protocol을 정의한 다음 해당 프로토콜을 구현하는 클래스를 만들면 나중에 간단한 클래스 인 인스턴스를 만들 수 있습니다. 작성되는

(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

라는 네임 스페이스와 같은 이름의 패키지에 간다
관련 문제