_评论者: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] 中要宽松得多 ☺。