尽管定义了 ClassTag,但没有可用的 ClassTag
No ClassTag available despite ClassTag defined
我有以下代码:
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线性代数包的成员(breeze.linalg
)
问题是上下文边界(只是作为隐式参数脱糖)不适用于辅助构造函数。您需要明确(哈)声明参数列表:
def this(x: Seq[(Int,B)])(implicit z: Zero[B], ct: ClassTag[B]) = ...
这感觉像是编译器中的错误,但我可以看出它是双向争论的。
我有以下代码:
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线性代数包的成员(breeze.linalg
)
问题是上下文边界(只是作为隐式参数脱糖)不适用于辅助构造函数。您需要明确(哈)声明参数列表:
def this(x: Seq[(Int,B)])(implicit z: Zero[B], ct: ClassTag[B]) = ...
这感觉像是编译器中的错误,但我可以看出它是双向争论的。