从消费类中隐含消费

时间:2014-09-02 00:45:41

标签: scala implicits

我正在寻找包含类的最佳语法,以获取其包含类所暴露的含义?

我所拥有的场景有两个用于测试的依赖项:应用程序的actor系统的创建,以及恰好需要actor系统的webclient:

trait Core {
  implicit def system: ActorSystem
}

trait WebClient {
  implicit def system: ActorSystem
}

trait Api extends WebClient {
  ...
}

trait Server extends Core {
  def api: Api
  val service = system.actorOf(Props(new Service(api)))
}

现在,我创建了一个提供actor系统和api的新App,但是Api需要一个隐含的actor系统,而我想出的唯一方法是手动提供它:

object ServerApp extends App with Core {

  implicit val system = ActorSystem("foo")

  val api = new Api {
    override implicit def system = implicitly[ActorSystem]
  }

}

是否有更好的语法让WebClient从Core获取隐式?我无法扩展Core,因为它包含在Core实现中,并且需要作为其中包含的其他内容的依赖项。但是override implict def system = implicitly[ActorSystem]似乎对于应该是,呃,隐含

的东西更加混乱。

1 个答案:

答案 0 :(得分:2)

你隐藏了隐含的值,因为它们具有相同的名称。

您可以考虑

class Api()(implicit val system: ActorSystem)

val api = new Api