def task() {
Thread.sleep(60*1000) // update lru cache every minute
// do some compute-intensive task here to populate lru cache
println("LRU Updated!")
}
new Thread {
override def run = while(true) task()
}.start
VS
Iterator.continually(task()).dropWhile(_=>true)
具有完全相同的行为。它们在引擎盖下是否相同?
答案 0 :(得分:0)
Iterator.continually
对于获取一个迭代器很有用,然后可以像伪集合一样使用它,以获得非副作用结果。在这里你正在做println
,所以continually
是一个很好的糖,但它并没有给你任何东西。
如果你有类似的东西:
def task() {
Thread.sleep(60*1000) // update lru cache every minute
// do some compute-intensive task here to populate lru cache
"LRU Updated!"
}
要应用副作用,你仍然可以使用线程,但是你不能做更多的事情(没有更复杂的代码)。
new Thread {
override def run = while(true) println(task())
}.start
如果你想转换输出,或者将它推送到另一个调用,或者组合它等,那么迭代器将是一个更好的抽象:
Iterator.continually(task()).map(x => s"$x Yay!").take(100)
但我想这并不是你想要从你的例子中做到的。