Передающий перечислимый параметр к классу случая не работает

Кто-то может сказать мне, почему это не работает?

case class XY(enum: MyEnum)

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

Ошибка: не найденный: введите MyEnum

25
задан missingfaktor 11 May 2010 в 01:46
поделиться

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 вместо 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)
}
45
ответ дан 28 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: