Oop 类Foo{this:SomeTraitType=>;是什么意思?

Oop 类Foo{this:SomeTraitType=>;是什么意思?,oop,scala,traits,Oop,Scala,Traits,我有这个问题是基于Akka并发预打印的(最终版本还没有提供),在这里使用它没有解释 在类的版本1中,它们具有: class Altimeter extends Actor with ActorLogging with EventSource{ ... } 该声明称,Altimeter现在与EventSource紧密耦合,因此测试Altimeter还需要测试EventSource。建议修改如下: --- a/src/main/scala/Altimeter.scala +++ b/src/mai

我有这个问题是基于Akka并发预打印的(最终版本还没有提供),在这里使用它没有解释

在类的版本1中,它们具有:

class Altimeter extends Actor with ActorLogging with EventSource{
...
}
该声明称,Altimeter现在与EventSource紧密耦合,因此测试Altimeter还需要测试EventSource。建议修改如下:

--- a/src/main/scala/Altimeter.scala
+++ b/src/main/scala/Altimeter.scala
@@ -9,9 +9,10 @@ import  scala.concurrent.ExecutionContext.Implicits.global
 object Altimeter{
   case class RateChange(amount: Float) //sent to Altimeter
   case class AltitudeUpdate(altitude: Double)
+  def apply() = new Altimeter with ProductionEventSource
 }

-class Altimeter extends Actor with ActorLogging with EventSource{
+class Altimeter extends Actor with ActorLogging{ this: EventSource =>
   import Altimeter._

   val ceiling = 43000       //feet
diff --git a/src/main/scala/EventSource.scala b/src/main/scala/EventSource.scala
index 1fd5578..ded4f38 100755
--- a/src/main/scala/EventSource.scala
+++ b/src/main/scala/EventSource.scala
@@ -8,7 +8,12 @@ object EventSource{
   case class UnregisterListener(listener: ActorRef)
 }

-trait EventSource { this: Actor =>
+trait EventSource{
+  def sendEvent[T](event: T): Unit
+  def eventSourceReceive: Actor.Receive
+}
+
+trait ProductionEventSource { this: Actor =>
   import EventSource._
我的第一个问题是,我不明白这个:SomeTraitType=>实现了什么。它是说这个类是SomeTraitType类型吗

我的第二个问题是,这和使用
扩展SomeTraitType有什么区别,为什么它有好处?如果我知道前者的意思,也许这是显而易见的。

这个符号(
this:EventSource=>…
)被称为“自类型注释”它还限制了一个特征混合到另一个继承结构中的方式。可以使用任何名称(不仅仅是
this
)。
self
是另一个常见的名称

这种用法或多或少就是蛋糕模式(或其简化形式)。有了这个术语,您可以找到许多有助于解释其用法的参考资料

自我类型注释的另一种用法(通常是不受约束的,简单地说是
self=>…
)为
this
创建了一个别名,可以在外部
this
被屏蔽的嵌套范围(嵌套类)中使用。

该注释(
this:EventSource=>…
)称为“自我类型注释”它还限制了一个特征混合到另一个继承结构中的方式。可以使用任何名称(不仅仅是
this
)。
self
是另一个常见的名称

这种用法或多或少就是蛋糕模式(或其简化形式)。有了这个术语,您可以找到许多有助于解释其用法的参考资料

自我类型注释的另一种用法(通常是不受约束的,简单地说是
self=>…
)为
this
创建了一个别名,该别名可以在嵌套作用域(嵌套类)中使用,其中外部
this
被屏蔽。

可能重复的