2024年Clojure状态调查!中分享你的想法!

欢迎!请参阅关于页面以获取有关此工作的更多信息。

+5
语法和读取器
已关闭

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

注:已关闭,修复已应用以显式测试和抛出运行时异常,改进了报告。在网站上更新了数据读取器函数的说明。

1 答案

+2
by
谢谢Alex。简要评论:使用assert的定制数据读取器仍然会产生错误报告。我认为那些对数据读取器假设较少(即捕获throwable)的方案会更好。
...