请在 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 投票

这里发生的事情有点难懂。看起来你这里有两个不同版本的 ClojureScript 吗?注意 REPL 报告的版本和堆栈跟踪报告的版本。

嗨!是的,这确实很奇怪。我从零开始,现在将正确的 cljs 输出放在了问题中。对不起造成混淆。行为是一样的。我认为我们是从 reagent 1.0 得到这个 cljs 版本。更新版本的 cljs 会表现不同吗?
这个问题在你项目外部复现起来似乎很简单。你能确认这个现象仍然存在于最新版本 `1.10.844` 中吗。

编辑
好主意,看起来最新版本的行为也是一样的:https://gist.github.com/harold/10dd1ba54332992b4eeab72aa88ef2bd
...