Как использовать метод withName () для Enumeratum IntEnumEntry - PullRequest
0 голосов
/ 22 мая 2018

В настоящее время я использую Enumeratum 1.5.13 в Scala 2.12.6.Я определил следующее:

sealed abstract class PartOfSpeech(val value: Int) extends IntEnumEntry
case object PartOfSpeech extends IntEnum[PartOfSpeech] {
  val values = findValues

  case object Noun        extends PartOfSpeech(0)
  case object Adjective   extends PartOfSpeech(1)
  case object Verb        extends PartOfSpeech(2)
  case object Adverb      extends PartOfSpeech(3)
  case object Numeric     extends PartOfSpeech(4)
  case object Exclamation extends PartOfSpeech(5)
  case object Preposition extends PartOfSpeech(6)
  case object Pronoun     extends PartOfSpeech(7)
  case object Conjunction extends PartOfSpeech(8)
  case object Determiner  extends PartOfSpeech(9)
  case object Article     extends PartOfSpeech(10)
}

Затем, когда я пытаюсь использовать метод withName() следующим образом:

val pos = PartOfSpeech.withName("Noun")

... Я получаю ошибку компиляции, указывающую методwithName не найдено.Итак, учитывая, что я не вижу ScalaDoc для Enumeratum (по крайней мере, я не смог их найти), я не знаю, как на это ответить, не копаясь в его исходном коде.Прежде чем тратить на это время, я подумал, что смогу узнать, есть ли у кого-то простое и / или очевидное решение.

1 Ответ

0 голосов
/ 22 мая 2018

Из того, что я могу сказать, единственный способ сделать эту работу для меня - реализовать ее самостоятельно в case object.Итак, я добавил это:

private val enumEntryByClassSimpleNameLowerCase: Map[String, PartOfSpeech] =
  values.map(enumEntry => (enumEntry.getClass.getSimpleName.takeWhile(_ != '$').toLowerCase, enumEntry)).toMap

def withName(value: String): Option[PartOfSpeech] =
  enumEntryByClassSimpleNameLowerCase.get(value.toLowerCase)

Это похоже на взлом.Я очень надеюсь, что внутри Enumeratum есть что-то, чего мне не хватает.Пожалуйста, дайте мне знать, если есть лучший способ достичь этого результата.Я использую перечисления целую кучу.Итак, этот шаблон будет протекать по всей моей кодовой базе.

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