我正在阅读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
?