我正在阅读Scala in Depth,第 5 章关于隐式。作者在第 102 页这样说:
用于隐式视图的隐式范围与隐式参数相同。但是当编译器在寻找类型关联时,它使用它试图从[我的重点]转换的类型,而不是它试图转换成的类型。
然而,几页之后,他展示了一个带有complexmath.ComplexNumber类的示例。你 import i,它是一个ComplexNumber,并调用它的*方法,它接受一个ComplexNumber参数。
import complexmath.i
i * 1.0
要将 1.0 转换为 a ComplexNumber,这会找到一个隐式转换,其定义如下:
package object complexmath {
implicit def realToComplex(r: Double) = new ComplexNumber(r, 0)
val i = ComplexNumber(0, 1)
但这与第一个陈述相矛盾,不是吗?它需要找到Double => ComplexNumber. 为什么它在complexmath包中查找,这是隐含范围的一部分 forComplexNumber但不是 for Double?