编写我自己的语法sugar函数来使用Await.result



我如何转换这个:

Await.result(purchase, 5 seconds)

能够以以下方式编写相同的语句:

purchase.await(5 seconds)

只是想通过编写自己的自定义dsl来学习如何重写我的一些代码。

您可以创建自己的隐式类:

import scala.concurrent.{Await, Awaitable}
import scala.concurrent.duration.Duration
object syntax {
object await {
implicit class AwaitableOps[T](private val awaitable: Awaitable[T]) extends AnyVal {
@inline
final def await(atMost: Duration): T =
Await.result(awaitable, atMost)
}
}
}

你可以这样使用:

import syntax.await._
purchase.await(5.seconds) // Note the dot. The postFix operator syntax is discouraged.

在Scala 3中,您可以编写类似的扩展方法

def [T](f: Future[T]).await(atMost: Duration) = Await.result(f, atMost)

scastie示例

最新更新