Enum — это сокращение от enumeration (перечисление), что означает именование или перечисление ряда элементов, называемых элементами перечисления. Это тип в Verse, который можно использовать для таких элементов, как дни недели или направления по компасу.
Нажмите на изображение, чтобы увеличить его.
Закрытые и открытые перечисления
Verse использует спецификаторы атрибутов <open> и <closed> для перечислений, чтобы задать способ изменения определения перечисления после публикации острова.
Перечисления по умолчанию являются закрытыми. При использовании закрытых перечислений нельзя добавлять или изменять порядок значений перечислений, а также нельзя заменять закрытое перечисление на открытое после публикации острова.
Закрытое перечисление лучше использовать в случаях, когда значения должны оставаться постоянными, например для дней недели.
С помощью открытых перечислений можно:
Добавлять новые значения перечислений.
Изменять порядок значений перечислений.
Заменять открытое перечисление на закрытое.
Открытые перечисления лучше использовать, если в дальнейшем количество значений в них увеличится. Пример: перечисление типов оружия.
Открытые перечисления нельзя использовать в операторе case без варианта по умолчанию (default case). Закрытые перечисления можно использовать в операторах case без варианта по умолчанию (default case), только если у всех значений перечисления есть вариант (case).
Создание перечисления
| Боевики | Пример кода |
|---|---|
Создание закрытых перечислений: Перечисления по умолчанию являются закрытыми. Используйте ключевое слово Вы можете явно определить перечисление как закрытое, указав спецификатор | Verse |
Создание открытых перечислений: Вам необходимо явно определить открытое перечисление, указав спецификатор | Verse |
Доступ к перечислителю: используйте точку | Verse |
Тип persistable
Перечисление является сохраняемым, если оно определено с помощью спецификатора <persistable>. Это означает, что вы можете использовать их в переменных weak_map, входящих в область видимости модуля, и их значения будут сохраняться в течение всех игровых сеансов.
Подробнее о сохраняемых элементах в Verse см. в статье Использование сохраняемых данных в Verse.
Временные перечисления нельзя использовать с сохраняемыми данными.
Ниже приведён пример закрытого сохраняемого перечисления для дней недели, которое можно хранить, обновлять и предоставлять к нему доступ для игрока.
day := enum<persistable>:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
SundayЕсли не указано явно, все перечисления по умолчанию являются закрытыми.
Опубликованные перечисления
После публикации острова некоторые параметры закрытых и открытых перечислений со спецификатором <persistable> фиксируются.
Закрытые перечисления:
Нельзя обновить, чтобы сделать их
<open>(открытыми).Нельзя добавлять, переименовывать, изменять порядок или удалять значения перечисления.
Если не указано явно, можно добавить спецификатор
<closed>.
Открытые перечисления:
Можно обновить до закрытого перечисления со спецификатором
<closed>.Можно добавлять и упорядочивать значения перечислений.
Нельзя переименовать или удалить значения перечисления.
Нельзя использовать в операторах case без варианта по умолчанию (default case).