Зачем мне перечисление Scala - PullRequest
0 голосов
/ 28 ноября 2018

Какую бы пользу я получил от использования Enum в Scala, а не от его использования.

object Colours extends Enumeration {
  val Red, Blue, Green = Value
}

Почему я не могу просто использовать это как:

 object Colours{
      val Red = "Red"
      val Blue = "Blue" 
      val Green = "Green"
}

Я согласен, это немного многословно, но мне не нужно делать toString всякий раз, когда я должен использоватьЭто.Есть ли лучшие причины использовать Enums?Мой вопрос: 1) Должны ли мы использовать Enums только потому, что это хорошая практика?2) Есть ли какие-либо соображения относительно производительности?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

К суммированию

Вы получаете эти преимущества от Enum

  • У вас есть индексирование
  • У вас есть предопределенное имя
  • Вы можете перебирать
  • Вы можете сравнивать упорядочение
  • Вы можете перебирать членов.

Не говоря уже о том, что Enum имеет эти проблемы

  • Перечисления имеют один и тот же тип после стирания.
  • Нет исчерпывающей проверки соответствия во время компиляции.
  • Они не взаимодействуют с перечислением Java.
0 голосов
/ 28 ноября 2018
  1. Реальный вопрос - «почему это хорошая практика?».При использовании системы типов вы уменьшаете вероятность ошибочного кода.Вы могли бы предотвратить ошибки, такие как:

    showColor("green") // wrong casing
    
    color match {
      case "Green" => // 
      case "Pink" => // invalid color
    } // match didn't include all possibilities (exhaustiveness)
    

    Конечно, вы всегда можете использовать заданные вами значения вместо литеральных строк, но без типов нет ничего, обеспечивающего это.

  2. Мудрость в производительности - вероятно, не огромная разница, если только она не в некотором узком цикле

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