_评论者: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] 的标准就会更加宽松 ☺。