Scala替代无限循环

时间:2017-06-29 15:19:42

标签: scala

Scala中是否有更多功能替代无限循环?

while(true) {
  if (condition) {
    // Do something
  } else {
    Thread.sleep(interval);
  }
}

3 个答案:

答案 0 :(得分:8)

你可以递归地做到

@tailrec
def loop(): Nothing = {
 if (condition) {
  // Do something
  } else {
  Thread.sleep(interval);
  }
  loop()
 }

答案 1 :(得分:5)

您可以做的一件事是使用高阶函数,例如Stream.continually,并将其与for理解配对:

import scala.util.Random
import scala.collection.immutable.Stream.continually

def rollTheDice: Int = Random.nextInt(6) + 1

for (n <- continually(rollTheDice)) {
  println(s"the dice rolled $n")
}

由于非引用透明的nextInt方法,这个例子本身并不是纯粹的功能,但是它可能有助于你考虑函数组合而不是使用副作用。

答案 2 :(得分:3)

我猜无限尾递归:

  @tailrec
  def loop(): Nothing = {
     if (condition) {
       // Do something
     } else {
       Thread.sleep(interval);
     }
     loop()
  }