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