2011-07-18 10 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 MethodInfo [1 2] [3])) 
"[email protected]" 

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

は私が間違って何をやっている、正しく動作するコードを示し? ?

答えて

1

あなたのレコードは私にとってうまくいきます。 REPLを再起動することをお勧めします。古いコードがぶら下がっている可能性があるからです。注また、あなたが代わりに

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

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

を書くことができるので、あなたは、レコード内のフィールドへの直接アクセスを持っていることをええ、キャッシュ問題となっている必要があります、ありがとう! – gatoatigrado

関連する問題