我有这个问题是基于 Akka Concurrency 预印本(最终版本尚不可用),这里没有解释就使用了。
在该课程的第 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._
我的第一个问题是我不明白this: SomeTraitType =>
完成了什么。字面意思是说该类是 SomeTraitType 类型吗?
我的第二个问题是,that 和 using 有什么区别extends SomeTraitType
,为什么它有优势?如果我知道前者的意思,也许这会很明显。