从Scala中的发电机代码获取随机地图



我在Scala中具有以下代码。它应该是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生成单个实例。sample确实返回Option,如果您的genMap无法生成有效的实例。

在测试代码中使用sample时,我通常只通过调用Option.get来进行测试崩溃,如果无法生成实例。这表明您的Gen定义太严格了。

最新更新