clojure--已定义记录中的名称冲突?

clojure--已定义记录中的名称冲突?,clojure,java-interop,clojure-java-interop,Clojure,Java Interop,Clojure Java Interop,我有一段行为不端的代码;当我为记录命名为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.

我有一段行为不端的代码;当我为记录命名为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]"

我做错了什么???

你的唱片对我来说很好。我建议重新启动REPL,因为可能有一些旧代码挂起。还请注意,您可以直接访问记录中的字段,因此可以进行写入

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

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