Я не совсем понимаю связь между всеми этими функциями read-string. Понятно, что clojure.core/read-string может читать любую сериализованную строку, которая выводится pr[n] или даже print-dup. Также ясно, что clojure.edn/read-string читает строки, отформатированные в соответствии со спецификацией EDN.
Однако я начинаю с Clojure Script, и неясно, соответствует ли cljs.reader/read-string. Этот вопрос был вызван тем фактом, что у меня была веб-служба, которая выдавала код Clojure, сериализованный таким образом:
(with-out-str (binding [*print-dup* true] (prn tags)))
Это создавало сериализацию объекта, которая включает в себя типы данных. Однако это не было прочитано cljs.reader/read-string. Я всегда получал ошибку такого типа:
Could not find tag parser for = in ("inst" "uuid" "queue" "js") Format should have been EDN (default)
Сначала я подумал, что эта ошибка была выбрана cljs-ajax, но после тестирования cljs.reader/read-string в REPL носорога я получил ту же ошибку, что означает, что она выбрана самой cljs.reader/read-string. Он вызывается функцией maybe-read-tagged-type в cljs.reader, но неясно, связано ли это с тем, что читатель работает только с данными EDN или если...?
Кроме того, из Отличия от документа Clojure, единственное, что сказано:
The read and read-string functions are located in the cljs.reader namespace
Это говорит о том, что они должны точно иметь такое же поведение.