4

给定:

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

隐式转换不会用于访问类型成员吗?

4

1 回答 1

1

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

  • 导致路径依赖类型的路径必须只有稳定的元素(规范中的路径)
  • 隐式转换是一种方法/函数,其结果总是不稳定的

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

于 2014-10-06T08:31:16.677 回答