小编ass*_*n95的帖子

错误:协变类型A出现在逆变位置

我试图写一个不可变的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)

scala covariance contravariance

7
推荐指数
1
解决办法
3141
查看次数

标签 统计

contravariance ×1

covariance ×1

scala ×1