当我们 在 UUID 字面量中写一个符号,报告的错误信息是不正确的
(至 1.11.1)
clojure -M -e '#uuid id'
Execution error (AssertionError) at clojure.main/main (main.java:40).
Assert failed: (string? form)
原因如下
它应该是这样的
Reader error (AssertionError) at clojure.uuid/default-uuid-reader (uuid.clj:12).
Assert failed: (string? form)
第二步骤的改进可以为数据字面量添加spec支持,就像宏那样。
Syntax error reading #uuid id at (REPL:1)
id - failed: string? at: [:form]
来自#clojure-dev电报频道
Alex: 你不需要在那里做任何特殊操作 - 只需在数据读取器函数上添加一个instrumented spec。
运行后
(s/fdef clojure.uuid/default-uuid-reader :args (s/cat :form string?))
(clojure.spec.test.alpha/instrument `clojure.uuid/default-uuid-reader)
信息变成
Syntax error reading source at (REPL:2:1).
Call to #'clojure.uuid/default-uuid-reader did not conform to spec.
这是一个更好的信息。
它还包括一个#:clojure.error{:phase :read-source}
在ex-data中。
所以修复方案可以是仅仅向clojure.uuid/default-uuid-reader
添加一个spec。