当扩展类在Scala中是通用时,为什么隐式失败?

时间:2011-12-31 02:41:22

标签: generics scala implicit-conversion

为什么以下代码有效:

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)

失败并出现以下错误:

  

错误:找不到参数c的隐含值:core.X

     

C类(arg:Int)(隐式c:X)扩展B(arg)

1 个答案:

答案 0 :(得分: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 的隐含值。