genRandom 创建一个随机数流,每次调用都有四分之一的机会终止。
def genRandom: Stream[String] = { val random = scala.util.Random.nextFloat() println(s"Random value is: $random") if (random < 0.25) { Stream.empty[String] } else { ("%.3f : A random number" format random) #:: genRandom } } lazy val randos = genRandom // 当randos迭代通过时,对getRandom进行惰性计算 for { x <- randos } println(x) // 有效地随机打印此打印的次数。
请注意,该#::构造会延迟递归:因为它是将当前随机数放在流之前,所以它不会评估流的其余部分,直到迭代为止。