Class 什么是=>;在Scala类定义的开头是什么意思?
问题的作者 在类定义的开头写了一个Class 什么是=>;在Scala类定义的开头是什么意思?,class,scala,Class,Scala,问题的作者 在类定义的开头写了一个=>。例如: abstract class Thing { t => type A type G <: Group { type A = t.A } val group: G } 抽象类事物{t=> A型 G型平均值 由于这在Google&Co中很难找到,有人能给我提供更多的背景信息或提供一个链接,我可以在这里找到关于这种语言结构的更多信息吗?类本身的默认命名是this。您可以用t替换它,方法是t=> 如果您的类包含子类,并且
=>
。例如:
abstract class Thing { t =>
type A
type G <: Group { type A = t.A }
val group: G
}
抽象类事物{t=>
A型
G型
平均值
由于这在Google&Co中很难找到,有人能给我提供更多的背景信息或提供一个链接,我可以在这里找到关于这种语言结构的更多信息吗?类本身的默认命名是
this
。您可以用t
替换它,方法是t=>
如果您的类包含子类,并且您需要访问封闭的自引用,那么它非常有用
在您的示例中,如果没有t=>
,您将编写如下内容:
abstract class Thing {
type G <: Group { type A = this.A }
}
它确实是自类型注释。请参见官方的Scala规范: 根据本规范,其上下文无关EBNF语法为: SelfType::=id[':'类型]'=>' |'此“”:'类型'=>' 因此,基本上,这意味着SelfType有两种基本形式。在一种形式中,您可以使用带类型或不带类型的id。在另一种形式中,您可以使用它,但它必须与类型一起使用
您可以在《Scala第二版编程》第29.4节中找到它。但是,请记住,书籍可能很快就会过时,因此您需要参考规范。它是一个“自类型”或“[类型]自参考”,如中所述,也是一个使用原因(最权威的指南可以说是Scala语言规范或SLS),(寻找“自我”)就我所见,pst在他的评论中提到了“self-types”,还有另一个用途就是重命名您提到的“this”引用。两者都称为“self-types”吗?在类头之后和类体之前,有两个声明的空间:您可以为该引用指定别名,如前所示,并且您可以按照建议链接中的描述指定self-type,或者您可以同时指定两者。但是self-type声明相当繁琐,需要您编写一个名称。如果您只想指定self-type,您可以使用
this:AType=>
,如果您想同时指定别名和self-type,您可以编写alias:AType=>
。Technically self type是一个类型,但self type声明包含别名定义
abstract class Thing { another_this = >
type G <: Group { type A = another_this.A}
}