_由 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] 的标准要宽松很多。