首页 > 解决方案 > 定义ADT时案例对象T和案例类T()的区别?

问题描述

假设在 scala 中我有一个 ADT,如下所示:

sealed trait Animal

object Animal {
case class Lion(name: String)    extends Animal
case class Elephant(name:String) extends Animal
case object Tiger                extends Animal
}

在这里,最好声明Tiger为案例对象还是应该声明为空案例类,即case class Tiger()?一个比另一个有优势吗?

标签: scalasingletonalgebraic-data-types

解决方案


如果只有Tiger它应该是一个对象。如果可以有几个相等Tiger的 s 它应该是一个类。

val tiger = Tiger()
val tiger1 = Tiger()
tiger == tiger1 // true
tiger eq tiger1 // false

推荐阅读