Scala使用流生成随机序列

示例

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) // 有效地随机打印此打印的次数。

请注意,该#::构造会延迟递归:因为它是将当前随机数放在流之前,所以它不会评估流的其余部分,直到迭代为止。