Jea*_*let 5 types scala this path-dependent-type
在Scala类中,我可以方便地声明方法的返回类型,this.type以保证它将返回调用它的同一对象:
class Foo {
def bar: this.type = this
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以类似地指定接受给定AnyRef参数的方法将完全返回该引用?以下代码段不提供此保证,我可以返回以下任何实例A:
def processAndReturn[A <: AnyRef](obj: A): A = {
// work with obj
obj
}
Run Code Online (Sandbox Code Playgroud)
huitseeker的建议实际上对-Ydependent-method-types选项有效:
$ scala -Ydependent-method-types
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
scala> def processAndReturn[A <: AnyRef](obj: A): obj.type = {
| // work with obj
| obj
| }
processAndReturn: [A <: AnyRef](obj: A)obj.type
scala> processAndReturn("hi")
res1: java.lang.String = hi
Run Code Online (Sandbox Code Playgroud)
从这个线程,我收集实验相关的方法类型已经存在了一段时间,甚至有一篇已发表的论文使用它们,但实现可能是错误的.关于重新编写Scala类型系统基础的讨论已经有了一些讨论(参见Adriaan Moor 关于依赖对象类型的幻灯片).如果它成功了,我想在Scala的未来版本中,依赖方法类型(以及其他内容)将完全犹豫不决.