2010-11-21 3 views
12

Я пытаюсь реализовать Plurk API, ожидая участия в Scala, но у меня есть выбор дизайна.Должен ли я использовать закрытый класс или перечисление в Scala?

Например, гендерный атрибут пользователя Plurk может быть одним из «мужских», «женских», «других».

sealed trait Gender 
object Male extends Gender 
object Female extends Gender 
object Others extends Gender 

Возникает вопрос, должен я предпочитаю запечатанный класс/объект, как выше пример коды, над исчислением для представления типов перечисления?

Потому что я нахожу, что редко встречаюсь с перечислением, когда я использую другую библиотеку Scala, а в большом количестве учебник Actor используется закрытый класс/объект для представления сообщений для Actor.

Значит ли это, что в Scala закрытый класс является лучшим/обычным выбором для перечисления?

+0

Возможный дубликат [Варианты классов против перечислений в Scala] (http://stackoverflow.com/questions/1898932/case-classes-vs-enumerations-in-scala) –

ответ

11

Если вам не нужны итерации по объектам Gender или нужны методы, такие как next и previous, классы и объекты - правильное решение.

Если вам нужны особенности «классов и объектов» и «scala.Enumbereration» this и this вопрос может быть интересным для вас.

+0

Если вам нужно повторить по запечатанным признакам, вы можете также используйте [this] (http://stackoverflow.com/questions/13671734/iteration-over-a-sealed-trait-in-scala) решение на основе макросов – Oswaldo

9

Использование Enumeration также довольно немного дешевле с точки зрения количества классов. В примере Gender это не имеет значения, но может возникнуть вопрос, хотите ли вы моделировать инструкции процессора путем перечисления со 100+ элементами.

+2

'Enumeration' будет еще лучше, если компилятор предупреждает о недостающих случаях как для запечатанных признаков. –

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