Clojure & ClojureScript: clojure.core / read-string, clojure.edn / read-string и cljs.reader / 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 Rhino, я получил ту же ошибку, что означает, что он выбрасывается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
Что говорит о том, что они должны иметь точно такое же поведение.