2011-05-23 37 views
4

Possible Duplicate:
Context bounds shortcut with higher kinded-types在斯卡拉,爲什麼我不能使用上下文綁定的類型構造函數?

爲什麼Scala編譯器不讓我寫這個?

class TypeCtor[M[_]: ClassManifest] 

它抱怨「錯誤:類型M需要類型參數」。如果我只要求ClassManifest,編譯器應該能夠插入它,不管M的參數化是什麼,不是?

這按預期工作:

class TypeCtor[M[_]](implicit val ev: ClassManifest[M[_]]) 
(new TypeCtor[Vector]).ev.erasure // => class scala.collection.immutable.Vector 

回答

3

看到我的回答this question

+0

太好了,謝謝,我錯過了那一個。我已經投票結束我的問題作爲重複。 – 2011-05-23 15:31:29

0

M的參數化indeeed無關,但Scala編譯器需求ClassManifest參數,以便知道要插入的清單。比方說,我們有

class TypeCtor[A,B](implicit val ev: ClassManifest) 

現在,編譯器將不知道是否插入A或B的清單還可以不寫ClassManifest [M],因爲ClassManifest預計類型的類型*和M有種* - > *。

+1

謝謝!但我仍然不明白爲什麼一個變體可以工作(使用書寫的隱式val),而另一個不能(與上下文綁定)。 – 2011-05-23 13:48:07

+0

哦!我只是意識到我誤解了你的問題...... – 2011-05-23 14:47:07

相關問題