类型成员的隐式转换

时间:2014-10-05 22:10:07

标签: scala implicit dependent-type path-dependent-type scala-2.11

下式给出:

implicit class WithRetType[T, U](x: T => U) {
  type Ret = U
}

这样:

val foo = (_: Int) * 2
val x: foo.Ret = 3

的产率:

  error: type Ret is not a member of Int => Int
val x: foo.Ret = ???
          ^

以下情况有效:

val foo = (_: Int) * 2
val fooR = new WithRetType(foo)
val x: fooR.Ret = 3

对于类型成员的访问,不要进行隐式转换吗?

1 个答案:

答案 0 :(得分:1)

隐式转换不能用于访问类型成员。无论实现细节如何,这都可以看作规范中两个项目的逻辑结果:

  • 导致路径依赖类型的路径必须只包含 stable 元素(规范中为Paths
  • 隐式转换是一种方法/函数,其结果始终是不稳定

因此两者不兼容:您不能在导致路径依赖类型的路径上进行隐式转换,因为转换本身不稳定,导致路径无效。