以下代码无法编译,因为两个乘法运算符在擦除后具有相同的类型:(f: Object)Object
我知道类型擦除,但我见过的所有情况都擦除了泛型类型,如List[Int]
或者List[String]
,在Scala双重定义中回答(2种方法具有相同类型的擦除).
如何让Scala对待不同类型的XxxT`类型不同?
trait AbstractTypes { type ScalarT type VectorT abstract class Operators(u: VectorT) { def *(f: ScalarT): VectorT def *(v: VectorT): VectorT } }
sjrd.. 6
这DummyImplicit
是为了什么:
trait AbstractTypes { type ScalarT type VectorT abstract class Operators(u: VectorT) { def *(f: ScalarT): VectorT def *(v: VectorT)(implicit dummy1: DummyImplicit): VectorT } }
DummyImplicit
如果需要更多重载,其擦除相同,则可以包含任意数量的s.
这DummyImplicit
是为了什么:
trait AbstractTypes { type ScalarT type VectorT abstract class Operators(u: VectorT) { def *(f: ScalarT): VectorT def *(v: VectorT)(implicit dummy1: DummyImplicit): VectorT } }
DummyImplicit
如果需要更多重载,其擦除相同,则可以包含任意数量的s.