【发布时间】:2020-07-17 17:35:26
【问题描述】:
我正在学习 scala 并尝试遵循 Scala Cookbook 的形式:
trait Animal
trait FurryAnimal extends Animal
case class Dog(name:String) extends Animal
case class Cat(name:String) extends Animal
现在当我做以下事情时:
val x = Array(Dog("Fido"),Cat("Felix"))
结果显示为:
x:Array[Product with Serializable with Animal] = Array(Dog(Fido),Cat(Felix))
虽然我知道案例类与 Product trait 混在一起
我没有得到的是:Product with Serializable with Animal
据我了解,产品与模式匹配有关
我用谷歌搜索了它,但没有得到任何东西。请帮助我详细了解这个概念。
谢谢
【问题讨论】:
-
嘿,它是一个异构数组,两个元素都扩展了 Animal,因此使用了 Animal。如果将这两个案例类都放在另一个案例类中,然后将该案例类添加到数组中。你会得到案例类的数组。一段时间以来,我自己正在寻找有关此产品的可序列化的好读物。但没有找到。也许有人可以清除我们的想法。!
-
@som-snytt :是的,我看到了,但我的问题是编译器为什么要这样做,是否有任何具体原因。据我所知,签名正在使用模式匹配(我这里可能有错误),但我不清楚。
标签: scala types traits case-class