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))))
Другие вопросы по тегам