使用这个关键字来继承?

5 浏览
0 Comments

使用这个关键字来继承?

这个问题已经有答案了:

可能是重复问题:

Scala自我类型和Trait子类之间有何区别?

来自scalatest网站上的示例。我不太理解其中一个细节

trait FunSuiteStackBehaviors { 
                   this: FunSuite => //This line
                         def a() {}
                         def b() {}
}
class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {}

据我理解,他们似乎试图将一些def分配到一个Trait中。但是,this: FunSuite =>部分是干什么的?我尝试使用extends FunSuite而不是像下面这样:

trait FunSuiteStackBehaviors extends FunSuite { 
                         def a() {}
                         def b() {}
}
class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {}

我仍然得到了相同的结果。它们是一样的吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

this: FunSuite => 被称为自身类型注释。关于 "this" 没有什么特别之处。这两个片段都是等效的。这里 有关 其基本原理的一些讨论。简而言之,自我类型注释有助于表示组合性质,而不是子类型关系。

0
0 Comments

这个:=> XXXX 被称为自类型注解。http://www.scala-lang.org/node/124
基本上,你在指定 "this" (当前对象)的类型为指定的类型。有点像 "从内部进行强制转换"。

0