[英]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.