Определить объект перечисления и класс значений на одном уровне - PullRequest
1 голос
/ 22 января 2012

Можно ли объявить объект и класс Enumeration на одном уровне в Scala?

Я начал с этого, но я не уверен, каков наилучший способ регистрации экземпляров.

object Gender extends Enumeration {
  val MALE = new Gender(0)
  val FEMALE = new Gender(1)
}

class Gender(val id: Int) extends Gender.Value {

}

Мотивация для этого заключается в том, что я не хочу ссылаться на класс enum как Gender.Gender, но Gender.

1 Ответ

3 голосов
/ 22 января 2012

Это работает:

object Gender extends Enumeration {
    val male   = new Gender
    val female = new Gender

    class Sneaky extends Val(nextId, null)
}

class Gender extends Gender.Sneaky

> println(Gender.values)
Gender.ValueSet(male, female)

Однако мне не очень приятно от этого. Я думаю, что было бы лучше либо сделать псевдоним типа (если вы можете в этой области):

object Gender extends Enumeration {
    ...
}

type Gender = Gender.Value

Или import тип перед использованием:

object Gender extends Enumeration {
    val male, female = Value

    type Gender = Value
}

import Gender._
val x: Value = male

(или, если можете, используйте классы падежей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...