Class 将枚举参数传递给案例类无效

Class 将枚举参数传递给案例类无效,class,scala,enumeration,Class,Scala,Enumeration,有人能告诉我为什么这不起作用吗 case class XY(enum: MyEnum) object MyEnum extends Enumeration { val OP1, OP2 = Value } 错误:未找到:键入MyEnum 这是因为MyEnum是一个对象,而对象是单例的。不可能将单例作为参数传递给case类,因为这样会强制要求该对象有多个实例 如果要传递MyEnum的值(即枚举值),请使用MyEnum.value: case class XY(enum: MyEnum.V

有人能告诉我为什么这不起作用吗

case class XY(enum: MyEnum)

object MyEnum extends Enumeration {
  val OP1, OP2 = Value 
}
错误:未找到:键入MyEnum


这是因为
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.Value
OP1
而不是
MyEnum.OP1
):

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

import MyEnum._

case class XY(enum: MyEnum)

class C {
  val x = XY(OP1)
}