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