问题的作者
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,有人可以给我更多背景信息或提供一个链接,我可以在哪里找到有关这种语言结构的更多信息?
答案 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节中找到它。但是,请记住,书籍可能很快就会过时,因此您需要参考规范。