Я не совсем понимаю связь между всеми этими функциями 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
Это говорит о том, что они должны точно иметь такое же поведение.