使用流生成随机序列

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  // getRandom is lazily evaluated as randos is iterated through

for {
  x <- randos
} println(x) // The number of times this prints is effectively randomized.

注意 #::构造,它懒惰地递归 :因为它将当前随机数预先添加到流中,所以在迭代之前它不会评估流的其余部分。