1

タイトル通りです、全部欲しいです。

  • 熱心な評価では、割り当てが完了するとすぐに関数が常に評価されます。
  • 遅延評価では、値が必要になるまでこれは行われませんが、その後は熱心な評価と同様にブロック操作になりますが、遅延します。
  • 値が必要になるまで、評価を熱心かつ同時に (ブロックせずに) 開始するものが必要です。

私はこれが少し奇妙であることを知っているので、説明的な要点を作成しました。

この例では完全に機能し、遅延熱心な値の計算は無料のようですが、他の 2 つの値はそれぞれ 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 の大ファンではありませんが、これを追加するのが最善の方法かもしれません。

implicit def getFuture[T](f: Future[T]): T = Await.result(f, Duration.Inf)
4

0 に答える 0