2016-01-20 55 views
2

我有以下代碼:可用盡管ClassTag沒有ClassTag定義

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已添加到泛型參數的事實。我錯過了什麼?

以上斯帕塞夫克託是微風線性代數包(breeze.linalg

+0

'import scala.reflect.ClassTag'? –

+0

是的,它是進口的。 – user1094206

+0

那麼,如果我定義'MyTrait',那編譯好就好了。 –

回答

2

問題是,上下文的邊界(其剛剛脫糖爲隱式參數)的一員,不應用到輔助的構造函數。你需要明確的(哈)聲明參數列表:

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

這感覺就像是在編譯器中的錯誤,但我可以看到它認爲兩者兼得。

相關問題