在for语句中的Scalacheck生成器顺序

时间:2018-06-13 15:52:05

标签: scala scalacheck

我正在做一个关于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))

这对我来说似乎很奇怪。任何人都可以解释这种行为吗?

0 个答案:

没有答案