当我们在一个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 Slack频道
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