【发布时间】:2015-02-22 17:01:21
【问题描述】:
我想知道为什么以下情况不起作用。假设我有两种类型:
trait Def[T]
trait Ref[T]
case class Module()
我想将Def 转换为Ref,所以我声明了以下方法:
object Ref {
implicit def fromDef[A](defin: Def[A])(implicit rc: RefConverter[A]): Ref[rc.ResType] = new Ref[rc.ResType] {}
}
但万一:
val moduleDef: Def[Module] = ???
val moduleRef: Ref[Module] = moduleDef
Scala 编译器找不到正确的转换方法(即fromDef 函数),但如果我们明确告诉它使用此转换,即Ref.fromDef(moduleDef),scalac 会找到正确的RefConverter 实例。要考虑的另一件重要事情是,如果我将结果类型更改为Ref[A],它也会解析转换链。那么编译器无法解析依赖结果类型的链?
【问题讨论】:
-
#ResType 和#RefType 有什么区别?
标签: scala types implicit-conversion