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 codingSapMessage
是ServerHealthStreamer
的子类型。我不知道,该子类型可以在超类型上进行模式匹配。非常感谢。如果value
是ServerHealthStreamer
,这意味着它可以是SapMessage
(或KafkaMessage
,或Complete
,或…),因此能够在模式匹配中测试它是有意义的。