在ScalaCheck中生成选项[T]
发布时间:2020-12-16 09:33:34 所属栏目:安全 来源:网络整理
导读:我试图在ScalaCheck中生成可选参数,没有成功。 似乎没有直接的机制。 Gen.containerOf [Option,Thing](thingGenerator)失败,因为它找不到隐式的Buildable [Thing,Option]。 我试过了 for { thing - Gen.listOfN[Thing](1,thingGenerator)} yield thing.h
我试图在ScalaCheck中生成可选参数,没有成功。
似乎没有直接的机制。 Gen.containerOf [Option,Thing](thingGenerator)失败,因为它找不到隐式的Buildable [Thing,Option]。 我试过了 for { thing <- Gen.listOfN[Thing](1,thingGenerator) } yield thing.headOption 但是这不起作用,因为listOfN生成一个总是长度为N的列表。因此,我总是得到一些[Thing]。类似地,listOf1不起作用,因为(a)它不产生空列表,但是(b)它是低效的,因为我不能设置元素数量的最大限制。 如何生成包含Nones的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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |