Scala:如果我使用类而不是对象进行枚举怎么办?

时间:2017-01-09 18:01:46

标签: scala

如果我写的话会发生什么不好的事情:

class TaskType extends Enumeration {
  type TaskType = Value
  val LINEAR_REGRESSION, POISSON_REGRESSION, LOGISTIC_REGRESSION, SMOOTHED_HINGE_LOSS_LINEAR_SVM, NONE = Value
};

IDE和编译器看起来很好用。如果import TaskType._TaskType而不是object,我必须插入一些class

1 个答案:

答案 0 :(得分:2)

它违背了将枚举作为一组唯一稳定标识符的目的。

要使用类的成员,我们需要一个实例。每个实例的成员都不同。实际上,在系统的某些部分实例化的LINEAR_REGRESSION将与在其他地方实例化的LINEAR_REGRESSION不同。

例如:

class TaskType extends Enumeration {
  type TaskType = Value
  val LINEAR_REGRESSION, POISSON_REGRESSION, LOGISTIC_REGRESSION, SMOOTHED_HINGE_LOSS_LINEAR_SVM, NONE = Value
}
val instance = new TaskType
val otherInstance = new TaskType


import instance._

val lr = LINEAR_REGRESSION

val lr2 = otherInstance.LINEAR_REGRESSION


lr == lr2
// false