24

问题 交换类型参数与抽象类型=>的作者在他的类定义的开头写了一个。例子:

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

什么t =>意思?

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

4

2 回答 2

16

类本身的默认命名是this. 您可以将其替换tt =>

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

如果没有t =>您的示例,您将编写如下内容:

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

Group { type A = this.A }是一个子类型,因此this将引用组专业化本身而不是事物对象。可能你得到的不是你想要得到的。如果您需要访问事物自引用,您应该通过为自引用分配另一个名称来解决名称冲突

abstract class Thing { another_this = >
  type G <: Group { type A = another_this.A}
}
于 2012-06-29T20:54:34.813 回答
0

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

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

根据这个规范,它的上下文无关 EBNF 语法是:

SelfType ::= id [':' 类型] '=>' | 'this' ':' Type '=>' 所以,基本上,这意味着 SelfType 有两种基本形式。在一种形式中,您可以使用带或不带 Type 的 id。另一方面,您可以使用它,但它必须带有类型。

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

于 2020-01-14T03:27:21.500 回答