Sco*_*son 5 scala path-dependent-type scala-2.9
我在Scala 2.9.2中遇到麻烦,实现了一个声明依赖返回类型的方法.以下代码
object DependentTypesQuestion {
def ??? = throw new UnsupportedOperationException
trait X {
trait Y
}
trait Z {
def z(x: X): x.Y
}
object Z extends Z {
override def z(x: X): x.Y = ???
}
}
Run Code Online (Sandbox Code Playgroud)
2.9.2下编译时会产生以下错误消息:
overriding method z in trait Z of type (x: DependentTypesQuestion.X)x.Y; method z has incompatible type
Run Code Online (Sandbox Code Playgroud)
在2.10.0-M4中,问题似乎已得到修复,但遗憾的是我的项目现在已经与2.9相关联.
是否可以在2.9.2中解决此问题?
(或者,是否有任何2.9.3的前景,其中包括2.10的后向移植修复?)
如果您确实坚持使用 2.9.x,那么以下可能是您的解决方法,
object DependentTypesQuestion {
def ??? = throw new UnsupportedOperationException
trait X {
trait Y
}
trait Z[D[_ <: X with Singleton]] {
def z[T <: X with Singleton](x: T): D[T]
}
type Dep[T <: X with Singleton] = T#Y
object Z extends Z[Dep] {
override def z[T <: X with Singleton](x: T): x.Y = ???
}
}
Run Code Online (Sandbox Code Playgroud)