2

我有以下代码:

trait MyTrait[B] {
  def func()
}

class A[B: ClassTag : Zero](val x: SparseVector[B]) extends MyTrait[B] {
  def this(x: Seq[(Int,B)]) = this({
    val (index, vals) = x.unzip
    vals.toArray
    new SparseVector[B](index.toArray, vals.toArray, vals.length)
  })

  def func(): Unit = {}
}

error: No ClassTag available for B尽管 ClassTag 已添加到泛型参数中,但仍会得到一个。我错过了什么?

SparseVector 上面是微风线性代数包(breeze.linalg)的成员

4

1 回答 1

2

问题是上下文边界(只是作为隐式参数去糖)不适用于辅助构造函数。您需要明确(哈哈)声明参数列表:

def this(x: Seq[(Int,B)])(implicit z: Zero[B], ct: ClassTag[B]) = ...

这感觉像是编译器中的一个错误,但我可以看到它是双向的。

于 2016-01-20T20:32:44.233 回答