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}
}