我有一个方法可以调用其他一些使用隐式类型Foo
的方法。我想在Foo中隐含f。我就是这样做的:
def myMethod(a: Int, f: Foo) = {
implicit val implicitF = f;
somethingThatNeedsFoo(a)
}
我不想在myMethod的签名中隐式标记f
,因为在使用myMethod的上下文中并不隐含Foos。我的问题:与使用临时变量相比,是否有更惯用(或简洁)的方法来实现这种效果?
答案 0 :(得分:6)
我从未见过这个实际使用,但你可以避免将变量绑定到名称。当然,使用下划线:
implicit val _ = f
我建议不要使用这种用法。
答案 1 :(得分:4)
您可以显式传递隐式参数,因此即使调用者的隐式作用域中没有Foo,调用者也可以只显式传递它。
如评论所述,您可以使用相同的技巧将Foo传递给somethingThatNeedsFoo
:
def myMethod(a: Int, f: Foo) =
somethingThatNeedsFoo(a)(f)