Scala 案例类返回产品而不是实际类型
我有一个trait和一些扩展这个trait的case类Scala 案例类返回产品而不是实际类型,scala,case-class,Scala,Case Class,我有一个trait和一些扩展这个trait的case类 sealed trait Bird case class Eagle(age: Int) extends Bird case class Sparrow(price: Double) extends Bird 如果我做了任何我希望作为类型返回特征的事情,比如 val result = "test" match { case s:String if s startsWith "t" => Eagle(5) case _ =&g
sealed trait Bird
case class Eagle(age: Int) extends Bird
case class Sparrow(price: Double) extends Bird
如果我做了任何我希望作为类型返回特征的事情,比如
val result = "test" match {
case s:String if s startsWith "t" => Eagle(5)
case _ => Sparrow(2)
}
我得到的是这个产品
类型
> result: Product with Serializable with Bird = Eagle(5)
我理解
产品
是所有案例类都可以扩展的东西。但是我不知道该如何处理产品
,我如何才能取而代之的是鸟
甚至是鹰
?你可以忽略你不关心的方面<代码>结果是一只鸟
,因此将其作为一只鸟使用。它也是产品
和可序列化
并不相关(除非您希望/需要)。可以通过指定其预期类型使其显式:
val result: Bird = "test" match {
case s:String if s startsWith "t" => Eagle(5)
case _ => Sparrow(2)
}
给出:
result: Bird = Eagle(5)
或者,您可以将其分配给另一个类型为
Bird
的变量,或者简单地期望它是Bird
的变量,然后向前冲,调用Bird
trait上定义的方法,将其作为参数传递给接受类型为Bird
的参数的函数,等等。您可以忽略不关心的方面<代码>结果是一只鸟
,因此将其作为一只鸟使用。它也是产品
和可序列化
并不相关(除非您希望/需要)。可以通过指定其预期类型使其显式:
val result: Bird = "test" match {
case s:String if s startsWith "t" => Eagle(5)
case _ => Sparrow(2)
}
给出:
result: Bird = Eagle(5)
或者,您可以将其分配给另一个Bird
类型的变量,或者简单地期望它是一个Bird
,然后向前冲,调用Bird
trait上定义的方法,将其作为参数传递给采用Bird
类型参数的函数,等等