gpt4 book ai didi

scala - 在ScalaCheck中生成选项[T]

转载 作者:行者123 更新时间:2023-12-03 12:09:26 24 4
gpt4 key购买 nike

我试图在ScalaCheck中生成可选参数,但没有成功。

似乎没有直接的机制。 Gen.containerOf[Option, Thing](thingGenerator)失败,因为它找不到隐式的Buildable[Thing, Option]

我试过了

for {
thing <- Gen.listOfN[Thing](1, thingGenerator)
} yield thing.headOption

但这是行不通的,因为 listOfN会生成一个列表,该列表的长度始终为N。因此,我总是得到一个 Some[Thing]。同样, listOf1不起作用,因为(a)它不会产生空列表,而且(b)它效率低下,因为我无法设置元素数量的最大限制。

如何生成包含None的 Option[Thing]

编辑:我找到了一个解决方案,但这并不简洁。有没有比这更好的方法了?
for {
thing <- for {
qty <- Gen.choose(0,1)
things <- Gen.listOfN[Thing](qty, thingGenerator)
} yield things.headOption
} yield thing

编辑2 :我将此概括为
def optional[T](g: Gen[T]) = 
for (qty <- Gen.choose(0, 1); xs <- Gen.listOfN[T](qty, g)) yield xs.headOption

因此,我不必多次编写它。但是可以肯定,这已经在图书馆中了,我只是错过了吗?

最佳答案

现在您可以使用:

Gen.option(yourGen)

关于scala - 在ScalaCheck中生成选项[T],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com