2013-03-11 69 views
0

假設我有以下階代碼:隱式參數不起作用

trait ValueSource[A] { 
    def value(a: Int): A 
} 

trait ValueSourceOps[A] { 
    def self: Int 
    def F: ValueSource[A] 
    def value: A = F.value(self) 
} 

trait ToValueSourceOps { 
    implicit def toValueSourceOps[A](index: Int)(implicit F0: ValueSource[A]): ValueSourceOps[A] = new ValueSourceOps[A] { 
    def self = index 
    def F: ValueSource[A] = F0 
    } 
} 

object Test extends ToValueSourceOps { 
    def value[A: ValueSource](index: Int): A = toValueSourceOps(index).value 
} 

以上代碼編譯很好,但是當我改變的最後一行(在對象的試驗方法「值」的機構)

def value[A: ValueSource](index: Int): A = index.value 

編譯器抱怨 無法爲參數F0發現隱含的價值:ValueSource [A]

在我看來,Def值[A:ValueSource]意味着我有一個病理意義cit值「ValueSource [A]」,那爲什麼編譯失敗?

回答

0

AtoValueSourceOps具有valueA,這使得它推斷問題沒有關係。對我來說,真正的問題是爲什麼它在你明確調用方法時工作。

我猜測,當toValueSourceOp被明確調用時,它來推斷相同的A,因爲這是唯一的隱含可用。