0

動作に問題のあるコードがあります。レコードにMethodInfoという名前を付けると、 .toStringメソッドが正しくオーバーライドされなくなりました。

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

簡単なテストを実行すると、これがどのように失敗するかがわかります。

=> (.toString (new MethodInfo [1 2] [3]))
"sketch.compiler.main.sklojure1.MethodInfo@10e0d118"

レコードの名前をAに変更すると、コードが正しく動作していることがわかります。

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

私は何を間違っていますか??

4

1 に答える 1

1

あなたの記録は私にとってはうまくいきます。古いコードがぶら下がっている可能性があるため、REPL を再起動することをお勧めします。また、レコード内のフィールドに直接アクセスできるため、次のように記述できることにも注意してください。

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

それ以外の

(defrecord MethodInfo [x y]
  Object
  (toString [this] (str (:x this))))
于 2011-07-18T09:29:46.397 に答える