Следующий код не компилируется, так как оба оператора умножения имеют одинаковый тип после стирания: (f: Object)Object
В Scala все абстрактные типы имеют одинаковый тип после стирания
Я знаю о типа стиранию, но во всех случаях я видел удалил общий тип, например List[Int]
или List[String]
, как указано в Scala double definition (2 methods have the same type erasure).
Как я могу использовать Scala для разных типов XxxT`?
trait AbstractTypes {
type ScalarT
type VectorT
abstract class Operators(u: VectorT) {
def *(f: ScalarT): VectorT
def *(v: VectorT): VectorT
}
}
Интересный трюк, но он немного меняет семантику. Например, если вы используете функцию вместо значения, каждое использование снова вызывает функцию. –