我对Scala非常陌生。
我想实现一个通用的矩阵类"class Matrix[T]"。对T唯一的限制是T必须实现"+"和"*"方法/函数。我该如何去做呢?
例如,我希望能够同时使用Int、Double和我自己定义的类型,如Complex。
我考虑了以下思路:
class Matrix[T <: MatrixElement[T]](data: Array[Array[T]]) {
def *(that: Matrix) = ..// code that uses "+" and "*" on the elements
}
abstract class MatrixElement[T] {
def +(that: T): T
def *(that: T): T
}
implicit object DoubleMatrixElement extends MatrixElement[Double]{
def +(that: Double): Double = this + that
def *(that: Double): Double = this * that
}
implicit object ComplexMatrixElement extends MatrixElement[Complex]{
def +(that: Complex): Complex = this + that
def *(that: Complex): Complex = this * that
}
一切类型检查都没问题,但我仍然无法实例化一个矩阵。我是否缺少隐式构造函数?我该如何做才能实现它?或者我的方法完全错误?
提前感谢 Troels
error("Undefined method")
来“实现”方法。请注意,Complex
不会 扩展Numeric
。相反,将存在一个Numeric[Complex]
的实例。 - Daniel C. Sobral