this aliasing
和self type
之间是否有任何关系?
this aliasing
是self type
的特例吗?
在scala 2nd P776的编程中,作者说:
抽象类解析器[+ T]扩展... {p =>
你在第29.4节中看到了这样的语法,它用于给出一个 自我型到特质。
但是,self类型的语法看起来不像这样,它就像:
this:SomeAssumedType =>
另一个问题是为什么this aliasing
有用?我看不出给this
引用别名有什么意义,因为它已经是当前对象引用的传统别名,但是在Play框架源代码中,我看到了很多代码(特别是,anorm部分) )喜欢:
trait RowParser [+ A] extends(Row => SqlResult [A]){
parent =>
为什么这有意义?
答案 0 :(得分:4)
您可以同时拥有自我类型和this
别名:
abstract class Parser[+T] { p: SomeAssumedType => … }
如果您不包含类型归属,Scala将假定变量的类型是周围类的类型,从而为this
提供了一个简单的别名。
如果您将名称this
保留为ascription,则Scala希望您以能够实现归属的方式初始化此类。
至于this
别名。以下是需要这种情况:
object OuterObject { outer =>
val member = "outer"
object InnerObject {
val member = "inner"
val ref1 = member
val ref2 = this.member
val ref3 = outer.member
def method1 = {
val member = "method"
member
}
def method2 = {
val member = "method"
this.member
}
def method3 = {
val member = "method"
outer.member
}
}
}
scala> OuterObject.InnerObject.ref1
res1: java.lang.String = inner
scala> OuterObject.InnerObject.ref2
res2: java.lang.String = inner
scala> OuterObject.InnerObject.ref3
res3: java.lang.String = outer
scala> OuterObject.InnerObject.method1
res4: java.lang.String = method
scala> OuterObject.InnerObject.method2
res5: java.lang.String = inner
scala> OuterObject.InnerObject.method3
res6: java.lang.String = outer