因此,Scala案例类与ADT类似,但在ADT的情况下,声明具有完整的案例列表,而案例类则不是,因此采用此案例类“family”的实例的函数可能会收到意外的事情,产生运行时错误。如何缓解这个问题?假设我有以下代码
trait Animal
case class Cat extends Animal
case class Dog extends Animal
def say(a: Animal) = a match {
case Cat => "meow"
case Dog => "woof"
}
然后有人可以扩展Animal
特征并调用say
函数。如何禁止任何进一步扩展的特性?
答案 0 :(得分:9)
你可以制作动物特质sealed
。含义:sealed trait Animal
sealed
traits只能通过在同一源文件中定义的类进行扩展。
通过这种方式,如果您在Animal
上使用模式匹配时考虑了所有情况,编译器也会发出警告。