评论者:gfredericks
我认为没有干净的方法来解决你提到的问题,这也是我没有在这里找到明显解决方案的原因之一。
我在创建 {{large-integer}} 和 {{double}} 生成器时遇到了这个问题,我决定创建两个生成器:{{large-integer}} 是一个具有默认行为的生成器,而 {{large-integer*}} 是一个接受选项并返回生成器的函数。
回想起来,我不知道这样是否是最好的选择,因为这样很容易造成混乱。我向 David MacIver 询问他在 hypothesis(一个类似的 python 库)中如何处理这个问题,他说他没有任何原始的生成器,只有返回生成器的函数(有时不带任何参数)。我非常喜欢这种方法的一致性,但它显然会对 test.check 实现产生巨大的破坏性变化(尽管有一些骇客技巧可以保留向下兼容性)。
这个问题比这个票据要大。就您提供的代码而言,我认为我更喜欢更接近 {{gen/set}} 的 API,使用选项映射而不是位置参数。
因此,我开始关注这个念头,即使用一些技巧在几个版本中保留向后兼容性,以清洁许多不一致性,但这些都是更大的变化。
如果我们不能提出一个干净的短期解决方案,我在 [test.chuck|
https://github.com/gfredericks/test.chuck] 的标准将比以前更加宽松☺。