标题是对的,我什么都想要。
- 在急切评估中,总是在分配完成后立即评估功能。
- 在惰性求值中,直到需要该值时才执行此操作,但随后它是一个阻塞操作,就像在急切求值中一样,但延迟了。
- 我希望有一些东西可以急切地同时开始评估(而不是阻塞),直到需要该值。
我知道这有点奇怪,所以我做了一个说明性的要点。
它在这个例子中完美运行,并且惰性渴望值的计算似乎是免费的,而其他两个值每个需要 10 秒。当然,事情正在另一个线程中发生,依此类推,但我对此很好,我只是想在需要时有一些选择来做这样的事情。
我一直在考虑以更优雅的方式来定义它,函数,注释等。最后我发现的唯一可能性是宏,它在 Scala (AFAIK) 中不可用。
有什么方法可以优雅地做到这一点,或者我写的东西是优雅的吗?
PD:只是为了更清楚。这就是做我想做的事情所需要的:
val eager_lazy_aux = Future(longComputation(1))
lazy val eager_lazy = Await.result(eager_lazy_aux, Duration.Inf)
这就是我想做的:
parallel val eager_lazy = longComputation(1)
我不是隐式的忠实粉丝,但也许添加这是我们能得到的最好的。
implicit def getFuture[T](f: Future[T]): T = Await.result(f, Duration.Inf)