7

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

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

我不想f在 myMethod 的签名中标记为隐式,因为 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 回答