我有一段行为不端的代码;当我将记录命名为 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]"
我做错了什么?
答案 0 :(得分:1)
您的记录对我来说很好。我建议重新启动REPL,因为可能会有一些旧代码。另请注意,您可以直接访问记录中的字段,因此您可以编写
(defrecord MethodInfo [x y]
Object
(toString [_] (str x)))
而不是
(defrecord MethodInfo [x y]
Object
(toString [this] (str (:x this))))