2024 Clojure状态调查!中分享您的看法。

欢迎!请参阅关于页面,了解更多关于如何使用本站的信息。

+1
ClojureScript
编辑

你好!一如既往,我们非常感激cljs——它大大提升了我们的工作效率,我们每天都在沉浸使用它中而喜爱它。

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

cljs重定位

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重定位

> (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
与用户 David+Nolen 的头像相关

在这里的情况有点难以理解。看起来你有两个不同的旧版本的ClojureScript吗?请注意REPL显示的版本和堆栈跟踪报告中显示的版本。

与用户 Harold 的头像相关
嗨!是的,真的很奇怪。我从零开始并正确地将 cljs 输出放到了问题中。抱歉造成混淆。行为是一样的。我相信我们得到这个 cljs 版本来自 reagent 1.0。cljs 的更新版本会有不同的行为吗?
与用户 David+Nolen 的头像相关
这个问题似乎在您的项目之外很容易重现。您能否确认这个问题在最新版本 `1.10.844` 中仍然存在。
与用户 Harold 的头像相关
编辑
这是一个好主意,看来最新版本的行为是相同的:[查看链接](https://gist.github.com/harold/10dd1ba54332992b4eeab72aa88ef2bd)
...