Может кто-нибудь сказать мне, почему это не работает?
case class XY(enum: MyEnum)
object MyEnum extends Enumeration {
val OP1, OP2 = Value
}
Ошибка: не найден: введите MyEnum
Ответ 1
Это потому, что 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.OP1) вместо MyEnum.Value и OP1 использовать MyEnum):
object MyEnum extends Enumeration {
type MyEnum = Value
val OP1, OP2 = Value
}
import MyEnum._
case class XY(enum: MyEnum)
class C {
val x = XY(OP1)
}