case类隐式内部的显式参数

时间:2015-11-06 10:28:42

标签: scala implicit

有没有办法避免这样的代码?

case class Foo(bar: Int, baz: String, ec: ExecutionContext) {
  implicit val implicitEc = ec  

  .... 
}

在参数列表的前面添加隐式具有与期望不同的效果。我希望executionContext是一个构造函数的显式参数,但是在类体内部被视为一个隐式变量。

1 个答案:

答案 0 :(得分:3)

case class Foo(bar: Int, baz: String, implicit val ec: ExecutionContext)

的工作原理。请注意,它不能应用于第一个参数。在这种情况下,我会使用您的原始代码(使用implicit private def代替implicit val除外,因此您不会创建额外字段并且不会污染API)。如果你有这样的多个类,这个解决方案应该可以工作(调整名称来尝试):

abstract class MakeTheParameterImplicit[A](implicit protected val dontOverrideInChildren: A)

case class Foo(ec: ExecutionContext) extends MakeTheParameterImplicit[ExecutionContext]()(ec)