2012-04-13 2 views
1

Я использую упорядоченный набор для некоторых вещей в Clojure 1.3.0. Мой project.clj включает в себя [ordered "1.1.0"].Как переопределить метод .toString для упорядоченного набора

Когда я называю (str (ordered-set 1 2 3)) я получаю "[email protected]" но когда я называю нормальной Clojure хэш-набор (str (hash-set 1 2 3)) я получаю правильный "#{1 2 3}" в результате.

str Метод вызывает .toString где-то, так как я переопределить метод .toString для ordered-set, так что я могу получить правильную строку из него?

спасибо

ответ

4

Ну, есть два ответа на этот вопрос. Один из них, ленивый сопровождающий ordered (я) должен получить его действие вместе и реализовать toString. Другое, вы, вероятно, не должны использовать str на любом месте, где вам небезопасно читать - pr-str - это гораздо более надежная функция представления данных. Например, (str {:a 'a}) и (str {:a "a"}) оба результата приводят к "{:a a}". С pr-str информация о типе остается.

+0

@Sonicsmooth Version 1.2.0 выпущен и содержит реализации '.toString', хотя я по-прежнему предостерегаю вас от их использования. – amalloy

+0

Спасибо. Я все еще не понимаю различия между str и pr-str, за исключением того, что pr-str, по-видимому, обеспечивает приятный для чтения вывод, поэтому я буду использовать это пока, пока не пойму, что происходит дальше. – Sonicsmooth

Смежные вопросы