加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读