什么=>是指Scala类定义的开头?

时间:2012-06-29 18:33:12

标签: class scala

问题的作者 Exchanging type parameters with abstract types在课程定义的开头写了=>。例如:

abstract class Thing { t => 
  type A 
  type G <: Group { type A = t.A } 
  val group: G 
} 

t =>是什么意思?

因为在Google和Google中很难找到Co,有人可以给我更多背景信息或提供一个链接,我可以在哪里找到有关这种语言结构的更多信息?

2 个答案:

答案 0 :(得分:16)

类本身的默认命名是this。您可以将t替换为t =>

如果您的类包含子类并且您需要访问封闭的自引用,那么它很有用。

在您的示例中没有t =>,您可以编写如下内容:

abstract class Thing {
  type G <: Group { type A = this.A }
}

Group { type A = this.A }是一个子类型,因此this将引用组特化本身而不是事物对象。可能你没有得到你的意思。如果您需要访问Thing self reference,则应通过为其他名称

指定自引用来解决名称冲突
abstract class Thing { another_this = >
  type G <: Group { type A = another_this.A}
}

答案 1 :(得分:0)

它确实是自我类型注释。请参阅官方的Scala规范:

https://scala-lang.org/files/archive/spec/2.13/13-syntax-summary.html

根据该规范,其上下文无关的EBNF语法为:

SelfType :: = id [':'类型]'=>' | ‘this’’:’键入‘=>’ 因此,基本上,这意味着SelfType具有两种基本形式。在一种形式中,您可以使用带或不带Type的ID。另外,您可以使用它,但是它必须带有Type。

您可以在Scala Second Edition的《编程》第29.4节中找到它。但是,请记住,书籍可能很快就会过时,因此您需要参考规范。