假设我有以下 scala 代码:
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 value[A: ValueSource] 意味着我有一个隐含的值“ValueSource[A]”,那么为什么编译会失败呢?