2011-12-31 36 views
-1

爲什麼下面的代碼工作:當擴展類在Scala中是泛型時,爲什麼隱式失敗?

class X 

class A(implicit c: X) 
class B(arg: Int)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B(arg) 

但不是這一個:

class X 

class A(implicit c: X) 
class B[T](arg: T)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B(arg) 

哪個失敗,出現以下錯誤:

error: could not find implicit value for parameter c: core.X

class C(arg: Int)(implicit c: X) extends B(arg)

+0

-1。當您省略錯誤消息時沒有幫助。 – sschaef 2011-12-31 10:43:34

+0

@Antoras你是對的...修復。 – 2011-12-31 11:34:41

+0

兩者都適用於2.9.1.final。你正在使用哪個版本? – 2011-12-31 12:21:59

回答

4

看來,如果你幫助工作當調用B的構造函數時使用類型推理器:

class X 

class A(implicit c: X) 
class B[T](arg: T)(implicit c: X) extends A 
class C(arg: Int)(implicit c: X) extends B[Int](arg) 

所以它看起來不是一個基本的限制。但是您沒有包含的錯誤信息非常無益無法找到參數c的隱式值:X

相關問題