scala - 编写我自己的语法糖函数以使用 Await.result

标签 scala

我怎样才能改变这个:

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 - 编写我自己的语法糖函数以使用 Await.result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60456103/

相关文章:

java - Scala @specialized 注解无限递归?

scala - 为什么 `trait X { def append[-](): Unit }` 编译?

scala - 如何在scala中没有var定义的情况下定义定期更新值

java - Maven重复标签 "dependencies"错误

Scala 和::对象

scala - 新的 dotty 运行时对我来说完全消失了

web-services - 在具有依赖关系的 Scala 代码中调用外部服务

scala - 如何知道使用 IntelliJ Idea 修改的 Scala 文件是否已保存以及是否已 checkin CVS?

Scala 保护对象

java - Scala 与 Java 方法调用