0

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

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

这有可能吗?

4

1 回答 1

2

在您的定义中provideAnA创建一个隐式变量。这个变量不在范围内myMeth,也是不必要的。只需从中返回值provideAnA,它应该可以工作。所以你的provideAnA方法应该是这样的:

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

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

于 2013-06-12T09:35:12.107 回答