使用流生成隨機序列

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.

注意 #::構造,它懶惰地遞迴 :因為它將當前隨機數預先新增到流中,所以在迭代之前它不會評估流的其餘部分。