2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页以了解更多有关该功能的详细信息。

+1
Spec

使用 Spec 1,这似乎可以更好地报告 count 验证失败 - 实际的计数不明确

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,这将卡在无限集合上。

公正的观察!然而,可以检测此案例是否易于处理,例如集合是否为向量?

这当然不是一个通用解决方案,但可能满足大部分实际用例。
还有一些值得关注的事情
- 除了 `:count` 之外,还有其他限定符
- 上面的 "执行错误" 实际上打印了值本身,因此很容易看到计数
- 这样会导致无限集合停滞不前,哎呀
- 令人惊讶的是,`explain-data` 在无限集合上也会停滞不前 - 我想这是一个错误
感谢您的观察。我不同意“[...] 实际上打印了值本身,因此很容易看到计数”。

对于人类来说,在向量化列表中计数42或1024个项目并不容易 :) 规范说明应该在那里使我们的生活更轻松。
...