Scala是无限循环的替代方案
对于无限循环,Scala中还有其他功能替代方案吗Scala是无限循环的替代方案,scala,Scala,对于无限循环,Scala中还有其他功能替代方案吗 while(true) { if (condition) { // Do something } else { Thread.sleep(interval); } } 你可以递归地做 @tailrec def loop(): Nothing = { if (condition) { // Do something } else { Thread.sleep(interval); } loop()
while(true) {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
}
你可以递归地做
@tailrec
def loop(): Nothing = {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
loop()
}
我猜是无限尾递归:
@tailrec
def loop(): Nothing = {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
loop()
}
您可以做的一件事是使用高阶函数,如
流。不断地,并将其与配对,以便理解:
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")
}
您可以看到它的实际应用,并对其进行操作。为了补充Stefano的伟大答案,如果有人正在寻找像我这样的用例:
我正在处理卡夫卡流课程中的任务,需要创建一个无限的模拟事件流到卡夫卡,其中一些字段是完全随机的(数量),但其他字段在特定的列表(名称)中旋转
与连续
相同的方法可用于向其传递方法(通过ETA扩展)并随后遍历有界变量:
for {record <- continually(newRandomTransaction _)
name <- List("John", "Stephane", "Alice")} {
producer.send(record(name))
}
我认为这将是更合适的类型。是不返回值的对象的类型Nothing
是永不返回的类型。@JörgWMittag为什么Nothing是“永不返回”?我的理解是,它只是一个底部类型底部类型是一个没有价值的类型。(与具有单个唯一值的单元类型相反)或抛出异常。我认为这是更合适的类型。是不返回值的对象的类型Nothing
是永不返回的类型。从2.13开始,Stream已被弃用。但是LazyList中也存在相同的方法(import scala.collection.immutable.LazyList.continuoused)
for {record <- continually(newRandomTransaction _)
name <- List("John", "Stephane", "Alice")} {
producer.send(record(name))
}
def newRandomTransaction(name: String): ProducerRecord[String, String] = {
...
}