Scala中是否有更多功能替代无限循环?
while(true) {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
}
答案 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()
}