2024 年 Clojure 状态调查! 分享您的看法。

欢迎!请查阅 关于页面 了解更多有关如何使用本站的信息。

+1 投票
Spec

使用 Spec 1,发现看起来计数验证失败可以报告得更加清晰 - 不清楚实际的计数是多少

user=> (s/assert (s/coll-of any? :count 1)
            [])
Execution error - invalid arguments to user/eval148 at (REPL:1).
[] - failed: (= 1 (count %))

1 个回答

0 投票

:count 使用了 bounded-count,它与无限集合配合得很好。报告实际的计数需要使用 count,后者在无限集合上会阻塞。

这是公平的观察!然而,可以检测该案例是否易于处理,例如,该 coll 是否是一个向量?

这当然不是一个通用解决方案,但可以满足大量实际用例。
by
还有一些值得指出的事情
- 除了 `:count` 之外,还有其他限定符
- 上面的“执行错误”实际上打印了值本身,因此很容易看到计数
- 这会导致无限集合挂起,哦不对
- 令人惊讶的是,“explain-data”也会在无限集合上挂起 - 我认为这是一个错误
by
谢谢,我珍视这些观察。对于“ [...] 实际上打印了值本身,因此很容易看到计数”,我不同意。

在向量化列表中数42或1024个项目对人类来说并不容易:spec说明应该让我们的生活变得更简单。
...