将枚举参数传递给案例类不起作用

时间:2010-05-10 18:41:55

标签: class scala enumeration

有人可以告诉我为什么这不起作用吗?

case class XY(enum: MyEnum)

object MyEnum extends Enumeration {
  val OP1, OP2 = Value 
}
  

错误:找不到:输入MyEnum

1 个答案:

答案 0 :(得分:45)

这是因为MyEnum是一个对象而对象是单例。将单例作为参数传递给case类是不可能的,因为这会强制存在这个对象的多个实例。

如果要传递MyEnum值(即枚举值),请使用MyEnum.Value

case class XY(enum: MyEnum.Value)

object MyEnum extends Enumeration { val OP1, OP2 = Value }

之后,您可以按预期使用MyEnum

val x = XY(MyEnum.OP1)

顺便说一句:常见的模式是定义类型别名,因此您可以稍微调整一下代码(即使用MyEnum而不是MyEnum.ValueOP1而不是{ {1}}):

MyEnum.OP1