2011-07-18 7 views
0

나는 오해의 소지가있다. MethodInfo이라는 레코드의 이름을 지정할 때 더 이상 .toString 메서드를 올바르게 재정의하지 않습니다. 간단한 테스트를 실행clojure - 정의 된 레코드의 이름 충돌?

(defrecord MethodInfo [^clojure.lang.ISeq x ^clojure.lang.ISeq y] 
    java.lang.Object 
    (toString [x] 
     (str (:x x)))) 

내가 잘못

=> (.toString (new A [1 2] [3])) 
"[1 2]" 

을 뭐하는 거지

=> (.toString (new MethodInfo [1 2] [3])) 
"[email protected]" 

의 기록을 이름을 변경하는 것은 올바르게 행동 코드를 보여줍니다 반면

, 이것이 실패하는 방법을 보여줍니다? ?

답변

1

내 레코드가 정상적으로 작동합니다. REPL을 다시 시작하는 것이 좋습니다. 오래된 코드가 매달려 있기 때문입니다. 레코드에 필드에 직접 액세스 할 수 있는지 당신이, 감사,

(defrecord MethodInfo [x y] 
    Object 
    (toString [_] (str x))) 

대신

(defrecord MethodInfo [x y] 
    Object 
    (toString [this] (str (:x this)))) 
+0

그래 쓸 수있는 캐시 문제가되어 있어야합니다, 그래서도주의! – gatoatigrado