我试图写一个不可变的Matrix[A]类.我希望类被协变的A,但是当我把+前面A的编译器开始抱怨在类中的一些操作.
以下是我的Matrix类的相关子集(实际类比以下子集大5倍):
class Matrix[+A] private(val contents: Vector[Vector[A]])(implicit numericEv: Numeric[A])
extends ((Int, Int) => A) with Proxy {
import numericEv._
import Prelude._
// delegate `equals` and `hashCode` implementations to `contents`
override def self = contents
val nRows: Int = contents.length
val nColumns: Int = contents(0).length.ensuring { len =>
contents.forall(_.length == len)
}
def dimensions = (nRows, nColumns)
def isSquare = nRows == nColumns
def hasSameOrderAs[B : Numeric](that: Matrix[B]) = this.dimensions == …Run Code Online (Sandbox Code Playgroud)