根据隐式查找隐式

时间:2013-06-12 09:24:56

标签: scala implicit-conversion

我有一个隐含的值,这取决于另一个隐含的值。我希望导入第一个隐式,当第二个隐藏在范围内时:

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()    
}

这有可能吗?

1 个答案:

答案 0 :(得分:2)

provideAnA的定义中,您创建了一个隐式变量。此变量不在myMeth的范围内,也是不必要的。只需从provideAnA返回值即可。因此,您的provideAnA方法应该如下所示:

implicit def provideAnA(implicit b:B) = new A{}

而且你必须从调用myMeth中删除括号,因为否则编译器会尝试在没有参数的情况下调用它,并且找不到它的impl。