繁体   English   中英

从Scala中的生成器代码获取随机映射

[英]Getting random maps from generator code in Scala

我从Scala的Coursera课程“功能性程序设计”中获取以下代码。 它应该是Int到Int映射的生成器。

lazy val genMap: Gen[Map[Int, Int]] = for {
  k <- arbitrary[Int]
  v <- arbitrary[Int]
  m <- oneOf(const(Map.empty[Int, Int]), genMap)
} yield m.updated(k, v)

我的问题是我不知道如何使用它。 输入:

genMap.generate

不起作用。 那么如何从该生成器获取从Int到Int的地图?

特征生成器如下所示(根据课程讲义):

trait Generator[+T]{
  self =>
  def generate : T
  def map[S](f:T=>S):Generator[S] = new Generator[S] {
    def generate = f(self.generate)
  }

  def flatMap[S](f:T=>Generator[S]):Generator[S] = new Generator[S]{
    def generate = f(self.generate).generate
  }
}

您可以使用genMap.sample生成单个实例。 但是,如果您的genMap无法生成有效实例,则sample确实会返回Option

当在测试代码中使用sample ,如果没有实例可以生成,我通常只是通过调用Option.get进行测试而崩溃。 这表明您的Gen定义过于严格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM