clojure - конфликт имен в определенной записи? - PullRequest
0 голосов
/ 18 июля 2011

у меня неправильный код;когда я называю запись 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]"

что я делаю не так ??

1 Ответ

1 голос
/ 18 июля 2011

Ваша запись отлично работает для меня.Я бы порекомендовал перезапустить REPL, так как там может быть какой-то старый код.Также обратите внимание, что у вас есть прямой доступ к полям в записи, поэтому вы можете написать

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

вместо

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