构造函数的隐式参数列表不能引用显式参数?

时间:2015-10-29 11:17:53

标签: scala constructor implicit path-dependent-type singleton-type

使用函数,隐式参数可以具有arg.type,其中arg位于显式参数列表中。但显然,不是一个班级:

Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_51).

scala> trait Applicable[A]
defined trait Applicable

scala> def f(a: AnyRef)(implicit ev: Applicable[a.type]): a.type = ???
f: (a: AnyRef)(implicit ev: Applicable[a.type])a.type

scala> case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
<console>:8: error: not found: value a
       case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
                                                              ^
<console>:8: error: type mismatch;
 found   : Applicable[a.type]
 required: Applicable[a.type]
       case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
                                               ^

这是一个错误还是一个功能?如果这种行为有意义,你能解释一下原因吗?

1 个答案:

答案 0 :(得分:1)

在scala的类定义中看起来,类型推断的信息不足。 如何定义Kniption参数化:

case class Kniption[T](a: T)(implicit ev: Applicable[T])