2016-09-28 4 views
0

Скажут у меня есть перечисление как это:Scala Перечисление получения перечисления на withName когда значение имеет аргумент

object Enm extends Enumeration { 
     val ONE, TWO, THREE = Value 
    } 

и это возможно для меня, чтобы получить disired результата по телефону с именем на ней Enm.withName("ONE"), но если у меня есть значение с аргумент, скажем:

object Enm extends Enumeration { 
    val ONE = Value("1") 
    val TWO = Value("2") 
    val THREE = Value("3") 
} 

вызова Enm.withName("ONE") я получить обратно отметив, так что теперь «1», «2» и так далее. Возможно ли каким-то образом получить имена val, но не те, что я ввел в Value?

+0

Зачем вам это нужно? Я думаю, что, возможно, единственный способ - сопоставить их. –

+0

'Enm.values.filter (_. ToString.startsWith (" 1 ")). Max' сейчас я использую эту конструкцию, но я подозреваю, что должен быть более формальный подход. – Dmitrii

+0

Почему бы не использовать 'Enm.withName (" 1 ")'? –

ответ

1

Hacky решение

Поддерживайте Map из слова строку номер строки отображения

object Enm extends Enumeration { 
    val ONE = Value("1") 
    val TWO = Value("2") 
    val THREE = Value("3") 
    val map = Map ("ONE" -> "1", "TWO" -> "2", "THREE" -> "3") 
} 

//Usage 
Enm.withName(Enm.map("ONE")) 

Вы не можете переопределить withName метод, как это final. Поэтому напишите пользовательский методName

object Enm extends Enumeration { 
    val ONE = Value("1") 
    val TWO = Value("2") 
    val THREE = Value("3") 
    private val map = Map ("ONE" -> "1", "TWO" -> "2", "THREE" -> "3") 
    def customWithName(str: String) = withName(map(str)) 
} 

//Usage 
Enm.customWithName("ONE") 

 Смежные вопросы

  • Нет связанных вопросов^_^