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 回答