有没有办法避免这样的代码?
case class Foo(bar: Int, baz: String, ec: ExecutionContext) {
implicit val implicitEc = ec
....
}
在参数列表的前面添加隐式具有与期望不同的效果。我希望executionContext是一个构造函数的显式参数,但是在类体内部被视为一个隐式变量。
答案 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)