使用函数,隐式参数可以具有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])
^
这是一个错误还是一个功能?如果这种行为有意义,你能解释一下原因吗?
答案 0 :(得分:1)
在scala的类定义中看起来,类型推断的信息不足。 如何定义Kniption参数化:
case class Kniption[T](a: T)(implicit ev: Applicable[T])