evidence
在里面
aProvider
和
bProvider
. 编译器无法消除这些歧义,既因为它是如何实现的,也因为隐式是一个坏主意,隐式可能已经很神秘,能够做无法显式完成的事情(消除冲突名称之间的歧义)。
ImplicitProvider
Implementation
让学生达到最高水平,并进行
object
implicit val
s
class Implementation[T] extends Evidence[T]
object Evidence {
implicit val aEvidence: Evidence[A] = new Implementation[A]
implicit val bEvidence: Evidence[B] = new Implementation[B]
}
import Evidence._
implicitly[Evidence[A]]
implicitly[Evidence[B]]
如果你需要一个实际的
隐式提供者
,您可以这样做:
class ImplicitProvider[T] { ... }
object ImplicitProviders {
implicit val aProvider = new ImplicitProvider[A]
implicit val bProvider = new ImplicitProvider[B]
implicit def ImplicitProvider2Evidence[T: ImplicitProvider]: Evidence[T]
= implicitly[ImplicitProvider[T]].evidence
}
import ImplicitProviders._