我有以下代码:
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
的一种类型,我可以将其用于模式匹配。
对于实例,模式匹配如下所示:
val value: SapHealthStreamer = Complete
value match {
case Init =>
???
case Complete =>
???
case Fail =>
???
case d:SapMessage =>
???
}
答案 0 :(得分:2)
完成是SapHealthStreamer的一种
不是,它是ServerHealthStreamer
类型的值(但不是SapHealthStreamer
类型的值)
对于实例,模式匹配如下所示:
由于类型不兼容,第一行将无法编译。假设您的意思是
val value: ServerHealthStreamer = Complete
相反,是的,您可以像这样匹配Complete
。问题出在case Init
和case Fail
上,它们将匹配其伴随对象而不是类型,而这可能不是您想要的(您会收到一条错误消息,因为这些伴随对象的类型与{{1}不兼容,因此永远无法匹配)。
value