我正在做一个关于Scala的Coursera课程,并且我被指示为堆生成一个生成器,以便生成随机堆。我的第一个想法如下:
lazy val genHeap: Gen[H] = oneOf(const(empty), for {
h <- oneOf(const(empty), genHeap)
x <- arbitrary[Int]
} yield insert(x, h))
不幸的是,运行此代码会导致堆栈溢出。 当我正在使用代码时,我发现以下代码确实有效,并且确实不会导致堆栈溢出:
lazy val genHeap: Gen[H] = oneOf(const(empty), for {
x <- arbitrary[Int]
h <- oneOf(const(empty), genHeap)
} yield insert(x, h))
这对我来说似乎很奇怪。任何人都可以解释这种行为吗?