我有一个隐含的值,这取决于另一个隐含的值。我希望导入第一个隐式,当第二个隐藏在范围内时:
trait B
trait A
implicit def provideAnA(implicit b:B) = {
implicit val a = new A{}
}
def myMeth(implicit a:A) = 42
{
implicit val implB = new B{}
// i would like to be able to pass this through compiler
myMeth()
}
这有可能吗?
答案 0 :(得分:2)
在provideAnA
的定义中,您创建了一个隐式变量。此变量不在myMeth
的范围内,也是不必要的。只需从provideAnA
返回值即可。因此,您的provideAnA
方法应该如下所示:
implicit def provideAnA(implicit b:B) = new A{}
而且你必须从调用myMeth
中删除括号,因为否则编译器会尝试在没有参数的情况下调用它,并且找不到它的impl。