2024 年 Clojure 调查问卷! 中分享您的想法。

欢迎!请查看关于页面获得更多关于如何使用此站点的信息。

+1 投票
ClojureScript
编辑

你好!如以往一样,非常感谢 cljs - 它极大地提高了我们的效率,我们每天都在使用它,因此我们仍然非常喜欢它。

在升级 clojurescript 版本后,我们开始收到一个奇怪的 read-string 相关错误:"没有为标记 uuid 提供读取函数"。

cljs repl

ClojureScript 1.10.238
app:cljs.user=> (cljs.tools.reader.edn/read-string "#uuid \"eed86fd1-4110-44d8-8f41-27473029cc6a\"")
#error {:message "No reader function for tag uuid.", :data {:type :reader-exception, :ex-kind :reader-error}}
   new (jar:file:/home/harold/.m2/repository/org/clojure/clojurescript/1.10.238/clojurescript-1.10.238.jar!/cljs/core.cljs:11123:11)
   Function.cljs$core$IFn$_invoke$arity$3 (jar:file:/home/harold/.m2/repository/org/clojure/clojurescript/1.10.238/clojurescript-1.10.238.jar!/cljs/core.cljs:11155:5)
   Function.cljs$core$IFn$_invoke$arity$2 (jar:file:/home/harold/.m2/repository/org/clojure/clojurescript/1.10.238/clojurescript-1.10.238.jar!/cljs/core.cljs:11153:16)
   cljs.core/ex-info (jar:file:/home/harold/.m2/repository/org/clojure/clojurescript/1.10.238/clojurescript-1.10.238.jar!/cljs/core.cljs:11150:1)
   Function.cljs$core$IFn$_invoke$arity$variadic (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/impl/errors.cljs:37:13)
   cljs.tools.reader.impl.errors/throw-ex (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/impl/errors.cljs:26:1)
   Function.cljs$core$IFn$_invoke$arity$variadic (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/impl/errors.cljs:43:4)
   cljs.tools.reader.impl.errors/reader-error (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/impl/errors.cljs:39:1)
   cljs.tools.reader.impl.errors/throw-unknown-reader-tag (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/impl/errors.cljs:221:4)
   cljs$tools$reader$edn$read_tagged (jar:file:/home/harold/.m2/repository/org/clojure/tools.reader/1.3.3/tools.reader-1.3.3.jar!/cljs/tools/reader/edn.cljs:372:10)

app:cljs.user=> (cljs.tools.reader.edn/read-string {:readers {'uuid uuid}} "#uuid \"eed86fd1-4110-44d8-8f41-27473029cc6a\"")
#uuid "eed86fd1-4110-44d8-8f41-27473029cc6a"

clj repl

> (clojure.edn/read-string "#uuid \"eed86fd1-4110-44d8-8f41-27473029cc6a\"")
#uuid "eed86fd1-4110-44d8-8f41-27473029cc6a"

以前,在 cljs 和 clj 之间读取 edn 的行为更为相似。我在查看 tools.reader 中的测试时发现了传递地图作为第一个参数的解决方案。

这是预期的吗?

感谢您的时间和考虑。

2 答案

0 投票
 
最佳答案

答案是用 clojure.edn 而不是 cljs.tools.reader.edn

$ clojure -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.844"}}}' -M -m cljs.main
ClojureScript 1.10.844
cljs.user=> (require 'clojure.edn)
nil
cljs.user=> (clojure.edn/read-string "#uuid \"eed86fd1-4110-44d8-8f41-27473029cc6a\"")
#uuid "eed86fd1-4110-44d8-8f41-27473029cc6a"

我学到了很多东西。谢谢你!

更多详细信息在此 gist 中:https://gist.github.com/harold/10dd1ba54332992b4eeab72aa88ef2bd

+1 投票
by

这里发生的事情有些难以理解。看起来有两个不同的旧版本的ClojureScript?注意REPL报告的版本和堆栈跟踪报告的版本。

by
嗨!是的,这确实很奇怪。我从头开始,并将正确的cljs输出放入了问题中。抱歉造成混淆。行为依然是相同的。我相信我们得到这个版本的cljs来自reagent 1.0。新的cljs版本会有不同的表现吗?
by
这个问题在你项目外部重现似乎很简单。你能确认这个问题是否仍然存在于最新的版本 `1.10.844` 中吗。
by
edited by
好主意,看起来最新版本的行为相同: https://gist.github.com/harold/10dd1ba54332992b4eeab72aa88ef2bd
...