5

applyメソッドのパラメーターとして関数を受け取る Object があるとします。

object Wrapper {
  def apply(block: TypeA => String) = {
    TypeA a = ...
    block(a)
  }
}

TypeAアプリケーションのドメイン タイプです。

インライン ブロックを定義すると、TypeAパラメーターを暗黙的に定義できます。

Wrapper { implicit a => functionThatUseImplicitA() } 

しかし、blockパラメータが ではなくFunction1の場合はどうなるFunction2でしょうか? 両方のパラメーターを暗黙的に定義するにはどうすればよいですか?

object Wrapper2 {
  def apply(block: (TypeA, TypeB) => String) = {
    TypeA a = ...
    TypeB b = ...
    block(a, b)
  }
}

これは機能しません:

Wrapper { implicit (a, b) => functionThatUseImplicitAB() } 

唯一の回避策は、それらを vals として定義することです。

Wrapper { (a, b) => 
  implicit val ia = a
  implicit val ib = b
  functionThatUseImplicitAB()
} 

ありがとう!

4

1 に答える 1