7

タイプの暗黙を利用する他のいくつかのメソッドを呼び出すメソッドがありますFoo。Foo内でfを暗黙的にしたいと思います。これが私のやり方です:

def myMethod(a: Int, f: Foo) = {
  implicit val implicitF = f;
  somethingThatNeedsFoo(a) 
}

fmyMethodが使用されているコンテキストでは、Foosは暗黙的ではないため、myMethodのシグネチャで暗黙的とマークしたくありません。私の質問:一時変数を使用するよりも、この効果を達成するための慣用的な(または簡潔な)方法はありますか?

4

2 に答える 2

6

これが実際に使用されているのを見たことがありませんが、変数を名前にバインドすることは避けられます。もちろん、アンダースコアを使用します。

implicit val _ = f

ただし、この使用法には反対することをお勧めします。

于 2012-08-23T12:46:11.137 に答える
4

暗黙的なパラメーターを明示的に渡すことができるため、呼び出し元の暗黙的なスコープにFooがない場合でも、呼び出し元は明示的に渡すことができます。

コメントしたように、これと同じトリックを使用してFooをsomethingThatNeedsFoo:に渡すことができます。

 def myMethod(a: Int, f: Foo) =
   somethingThatNeedsFoo(a)(f) 
于 2012-08-23T04:21:31.027 に答える