在方法中标记隐含的参数

the*_*met 7 scala implicit

我有一个方法调用一些其他方法,使用隐式类型Foo.我想在Foo中隐含f.我是这样做的:

def myMethod(a: Int, f: Foo) = {
  implicit val implicitF = f;
  somethingThatNeedsFoo(a) 
}
Run Code Online (Sandbox Code Playgroud)

我不想f在myMethod的签名中标记隐式,因为Foos并不隐含在使用myMethod的上下文中.我的问题:与使用临时变量相比,是否有更惯用(或简洁)的方法来实现这种效果?

Deb*_*ski 6

我从未见过这个实际使用过,但你可以避免将变量绑定到名称.当然,使用下划线:

implicit val _ = f
Run Code Online (Sandbox Code Playgroud)

不过,我建议不要这样做.


Jed*_*ith 4

您可以显式传递隐式参数,因此即使调用者的隐式作用域中没有 Foo,调用者也可以显式传递它。

正如所评论的,您可以使用相同的技巧将 Foo 传递给somethingThatNeedsFoo

 def myMethod(a: Int, f: Foo) =
   somethingThatNeedsFoo(a)(f) 
Run Code Online (Sandbox Code Playgroud)