评论者:gfredericks
我认为目前没有任何干净的方法来解决您提到的问题,这也是为什么我看不到这里有一个明显的解决方案。
我在创建 {{large-integer}} 和 {{double}} 生成器时遇到了这个问题,并决定创建两个生成器:{{large-integer}} 是具有默认行为的生成器,而 {{large-integer*}} 是一个接受选项并返回生成器的函数。
事后看来,我不知道这是否是最好的选择,因为它的确很令人困惑。我向 David MacIver 咨询了他在 hypothesis(一个类似的 Python 库)中如何处理此问题,他说他没有 *任何* 原始生成器,只有返回生成器的函数(有时不带参数)。我喜欢这种方法的统一性,但是它显然会对 test.check(尽管有一些可以保留向后兼容性的小巧技巧)造成重大的破坏性改变。
这个问题比这个工单更大一些。关于你提供的代码,我认为我更喜欢更接近于 {{gen/set}} 的 API,使用一个选项映射,而不是位置参数。
现在让我思考这个问题,我开始专注于这个想法:一个为了清理大量不一致性而使用改为保持向后兼容性的一些巧妙的大的破坏性 API 改变。但再次强调,这比这个工单更大。
如果我们不能提出一个干净且短期的解决方案,那么我在 [test.chuck|
https://github.com/gfredericks/test.chuck] 上的接受标准就更为宽松了 ☺。