隐式def函数的含义是什么?

时间:2017-05-18 09:41:23

标签: scala

在scala中,当我使用隐式def字段创建特征时,如何使用它们为什么我应该将隐式关键字添加到def关键字?

trait MyXXXProtocol extends Logging {

  implicit def actor: ActorSystem
  implicit def materializer: Materializer
  implicit def executor: ExecutionContextExecutor


}

任何例子都会有所帮助。

1 个答案:

答案 0 :(得分:4)

首先阅读本文,其中讨论了在特征中使用valdef之间的区别在于Scala。 here

当你的特性包含依赖于这些暗示的某种特定的具体实现时,你会使用该模式,但是你希望你的特征的最终实现者能够为那些暗示指定具体的值。

trait MyXXXProtocol extends Logging {

  implicit def actor: ActorSystem
  implicit def materializer: Materializer
  implicit def executor: ExecutionContextExecutor

  def test(input: String): Unit = {
    // let's pretend this is valid
    actor.props("bla").send(input)
  }

如果例如send的签名是这样的话,那么这很有用:

def send(input: String)(
  implicit system: ActorSystem,
  materializer: FlowMaterializer
): Unit = ...

它很有用,因为你现在已经创建了一个模板,但是由具体的实现者来提供这些东西将要执行的隐式系统,你转发那些暗示,以便你可以在需要的地方定义一些实现,但是你可以稍后提供一个真实的隐含。