评论者:gfredereicks
我认为没有一种干净的方法来解决你提到的问题,这也是我没有在这里看到明显解决方案的原因之一。
我在创建 {{large-integer}} 和 {{double}} 生成器时遇到了这个问题,我决定创建两个生成器:{{large-integer}} 是具有默认行为的生成器,而 {{large-integer*}} 是一个接受选项并返回生成器的函数。
事后看来,我不知道这是否是最好的选择,这可能很令人困惑。我向 David MacIver 询问关于他在 hypothesis(一个类似的 Python 库)中如何处理这个问题,他说他没有“任何”原始生成器,只有返回生成器的函数(有时不带参数)。我喜欢这种方法的一致性,但它显然会使 test.check(尽管有一些混搭技巧可以保留向后兼容性)发生巨大的功能拆分。
这个问题比这个工单更大。关于你显示的代码,我认为我更喜欢类似 {{gen/set}} 的 API,它使用选项映射而不是位置参数。
现在你想让我思考这个问题,我开始专注于一个巨大的功能拆分的概念,这个拆分使用混搭技巧在几个版本中保留向后兼容性,为了清理许多不一致之处。但同样,这比这个工单更大。
如果我们不能想出一个干净的最短期的方案,我在 [test.chuck|
https://github.com/gfredericks/test.chuck] 的标准就会更加宽松了。