_评论由gfredericks发表_
我认为没有一个干净的解决方案可以解决这个问题,这也是我没有在这里找到明显解决方案的原因之一。
我在创建 {{large-integer}} 和 {{double}} 生成器时遇到了这个问题,我决定创建两个生成器:{{large-integer}} 是具有默认行为的生成器,{{large-integer*}} 是一个接收选项并返回生成器的函数。
事后的认识是,我不知道这是否是最好的选择,因为这很让人困惑。我向David MacIver询问了他在hypothesis (一个类似的python库) 中是如何处理这个问题的,他说他没有任何原始的生成器,只有返回生成器的函数(有时需要0个参数)。我喜欢这种方法的一致性,但这显然会破坏test.check的向后兼容性。尽管有一些巧妙的技巧可以保留向后兼容性。
这个问题比这个工单要大。关于你显示的代码,我认为我更喜欢类似于 {{gen/set}} 的API,而不是位置参数的方式,使用选项映射。
现在我开始思考这个问题,我开始沉迷于一个大幅破坏API的大改变想法,这个改变会使用一些技巧来保留几个版本的向后兼容性,以清理很多不一致性。但再次强调,这比这个工单要大。
如果我们想不出一个干净的短期方法,那么我在 [test.chuck|
https://github.com/gfredericks/test.chuck] 的标准要宽松得多。