_评论者: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] 中的接受标准要宽松得多 ☺。