我在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
定义太严格了。