首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从生成器列表创建生成器

从生成器列表创建生成器
EN

Stack Overflow用户
提问于 2016-02-16 05:16:52
回答 2查看 345关注 0票数 0

我想从多个生成器创建生成器。我有发电机清单

代码语言:javascript
复制
val generators: List[Gen] = List(Gen[Int], Gen[Double], Gen[String], ...)

我不知道名单的大小,可能是任何尺寸

我想创造出这样的东西:

代码语言:javascript
复制
val listGen: Gen[List[Any]] = createListGenerator(generators)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-16 07:40:02

如果希望listGen以任意顺序从generators中的一个或多个生成器中提取任意数量的元素,则可以执行以下操作:

代码语言:javascript
复制
// Scala's type inference gets a bit finicky when combining Anys with CanBuildFroms
val comboGen = Gen.sequence[List[Any], Any](generators).flatMap(Gen.oneOf[Any])
val listGen = Gen.listOf(comboGen)

或者,如果您想让listGen生成的元素数量与generators中的元素完全相同,并且顺序相同,那么您可以简单地这样做。

代码语言:javascript
复制
val listGen = Gen.sequence[List[Any], Any](generators)
票数 1
EN

Stack Overflow用户

发布于 2016-02-16 09:36:12

我们从发电机的列表开始

代码语言:javascript
复制
val generators: List[Gen[Any]] = ???

接下来,我们创建一个生成器,它通过选择一个生成器并生成由该生成器生成的项来生成元素:

代码语言:javascript
复制
val genOne: Gen[Any] = for {
  gen <- Gen.oneOf(generators)
  item <- gen
} yield item

我们可以使用这个生成器创建一个列表生成器。

代码语言:javascript
复制
val listGen: Gen[List[Any]] = Gen.listOf(genOne)

这个列表生成器生成一个列表(可能是空的),它可以包含由原始generators列表中的生成器生成的项,但是并不总是包括所有生成器,并且顺序是随机的。

例如,如果generators列表包含Gen[Int]Gen[Double]Gen[String],则listGen生成的列表。将以任何顺序包含任意数量的in、加倍和字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35424327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档