在方法中标记隐含的参数

时间:2012-08-23 03:24:21

标签: scala implicit

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

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

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

2 个答案:

答案 0 :(得分:6)

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

implicit val _ = f

我建议不要使用这种用法。

答案 1 :(得分:4)

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

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

 def myMethod(a: Int, f: Foo) =
   somethingThatNeedsFoo(a)(f)