当我们在一个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)
第二步的改进可能是将规格支持添加到数据字面量中,就像宏一样。
Syntax error reading #uuid id at (REPL:1)
id - failed: string? at: [:form]
来自#clojure-dev Slack频道
Alex:那里不需要任何特殊的东西 - 只需在数据读取器函数上有一个装备的规格
运行后
(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