Scala 当它被扩展时,它是特质的一部分吗?

Scala 当它被扩展时,它是特质的一部分吗?,scala,Scala,我有以下代码: object ServerStreamer { sealed trait Ack object Ack extends Ack sealed trait ServerHealthStreamer case class Init(ackTo: ActorRef[Ack]) extends ServerHealthStreamer case object Complete extends ServerHealthStreamer case clas

我有以下代码:

object ServerStreamer {

  sealed trait Ack

  object Ack extends Ack

  sealed trait ServerHealthStreamer

  case class Init(ackTo: ActorRef[Ack]) extends ServerHealthStreamer

  case object Complete extends ServerHealthStreamer

  case class Fail(ex: Throwable) extends ServerHealthStreamer

  sealed trait SapHealthStreamer extends ServerHealthStreamer

  case class SapMessage(ackTo: ActorRef[Ack], msg: SapHealthEvent) extends SapHealthStreamer

  sealed trait KafkaHealthStreamer extends ServerHealthStreamer

  case class KafkaMessage(ackTo: ActorRef[Ack], msg: KafkaHealthEvent) extends KafkaHealthStreamer

}
我想知道,例如,
Complete
是否是一种类型的
SapHealthStreamer
,我可以使用它进行模式匹配

对于Instance,模式匹配如下所示:

val value: SapHealthStreamer = Complete


value match {
   case Init =>
    ???
   case Complete =>
    ??? 
   case Fail =>
    ???     
   case d:SapMessage =>
    ???    
}
Complete是一种SapHealthStreamer

它不是,它是一个类型为
serverhealthreamer
(但不是类型为
saphealthreamer

对于Instance,模式匹配如下所示:

val value: SapHealthStreamer = Complete


value match {
   case Init =>
    ???
   case Complete =>
    ??? 
   case Fail =>
    ???     
   case d:SapMessage =>
    ???    
}
由于类型不兼容,第一行将无法编译。假设你是说

val value: ServerHealthStreamer = Complete
相反,可以这样匹配
Complete
。问题在于
case Init
case Fail
将匹配它们的伴生对象而不是类型,这可能不是您想要的(您应该得到一条错误消息,因为这些伴生对象的类型与
值不兼容,因此永远无法匹配)


我不明白问题是什么。例如,
Complete
是一种
sapchealthreamer
吗?当变量是
SapHealthStreamer
的实例时,我是否可以在模式匹配子句中包含
Complete
?@Jasper-M I updatet mypost@Jasper-谢谢,我不够专心。怎么可能呢,当我可以与
SapMessage
模式匹配的
val值:ServerHealthStreamer
时?@zero\u coding
SapMessage
ServerHealthStreamer
的子类型。我不知道,该子类型可以在超类型上进行模式匹配。非常感谢。如果
value
ServerHealthStreamer
,这意味着它可以是
SapMessage
(或
KafkaMessage
,或
Complete
,或…),因此能够在模式匹配中测试它是有意义的。