Кто-то может сказать мне, почему это не работает?
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)
}