评论由: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] ☺ 的标准就要宽松得多。