clojure - конфликт имен в определенной записи?
У меня плохо работает код; когда я называю запись 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 ответ
Решение
Ваша запись отлично работает для меня. Я бы порекомендовал перезапустить REPL, поскольку там может быть какой-то старый код. Также обратите внимание, что у вас есть прямой доступ к полям в записи, так что вы можете написать
(defrecord MethodInfo [x y]
Object
(toString [_] (str x)))
вместо
(defrecord MethodInfo [x y]
Object
(toString [this] (str (:x this))))