これを直接行うことはできません。の値は、myConnection
呼び出す前に本当に決定されていませんexecute
か? この場合、これを行うことができます:
def execute[T](active: Boolean)(blockOfCode: String => T): Either[Exception, T] = {
val myConnection = "how to get this implicit val into scope"
Right(blockOfCode(myConnection))
}
execute(true) { implicit connection =>
useMyConnection()
}
基本的に、評価された関数にパラメーターを渡しますが、呼び出しサイトで暗黙的にマークすることを忘れないでください。
このような Implicit が複数ある場合は、それらを専用の「Implicit プロバイダー」クラスに配置することをお勧めします。例えば:
class PassedImplicits(implicit val myConnection: String)
def execute[T](active: Boolean)(blockOfCode: PassedImplicits => T): Either[Exception, T] = {
val myConnection = "how to get this implicit val into scope"
Right(blockOfCode(new PassedImplicits()(myConnection)))
}
execute(true) { impl =>
import impl._
useMyConnection()
}
を回避したい場合はimport
、各フィールドに「暗黙的なゲッター」を提供し、次のPassedImplicits
ように記述できます。
implicit def getMyConnection(implicit impl: PassedImplicits) = impl.myConnection
execute(true) { implicit impl =>
useMyConnection()
}