Каков идиоматический способ создания и использования Перечней в Балерине? - PullRequest
2 голосов
/ 10 июня 2019

Нашли здесь некоторые доказательства того, что enum был поддержан в Ballerina в один момент, но , похоже, был удален .Кто-нибудь знает о рекомендуемом / поддерживаемом / идиоматическом способе работы с перечисляемыми значениями в Ballerina?

1 Ответ

3 голосов
/ 10 июня 2019

Да, мы недавно удалили тип enum из языка. Теперь вы можете в общем случае определять перечисляемые значения, используя константы и тип объединения.

// Following declarations declare a set of compile-time constants. 
// I used the int value for this example. You could even do const SUN = "sun". 
const SUN = 0;
const MON = 1;
const TUE = 2;
const WED = 3;
const THU = 4;
const FRI = 5;
const SAT = 6;

// This defines a new type called "Weekday"
type Weekday SUN | MON | TUE | WED | THU | FRI | SAT;

function play() {
    Weekday wd1 = WED;
    Weekday wd2 = 6;

    // This is a compile-time error, since the possible values 
    //  which are compatible with the type "Weekday" type are 0, 1, 2, 3, 4, 5, and 6
    Weekday wd3 = 8;
}

Позвольте мне объяснить, как это работает в соответствии со спецификацией языка. Рассмотрим следующее определение типа. Вы можете назначить возможные целочисленные значения, а также логические значения (true или false) переменной типа IntOrBoolean.

type IntOrBoolean int | boolean;
IntOrBoolean v1 = 1;
IntOrBoolean v2 = false;

Аналогично, вы можете определить новое определение типа, которое содержит только несколько значений, таких как это. Здесь 0 обозначает одноэлементный тип со значением 0, а 1 обозначает другой одноэлементный тип со значением 1. Тип Singleton - это тип, который имеет только одно значение в своем наборе значений.

type ZeroOrOne 0 | 1;

При таком понимании мы можем переписать наш тип Weekday следующим образом.

type Weekday 0 | 1 | 2 | 3 | 4 | 5| 6;

Когда вы определяете постоянную времени компиляции, такую ​​как const SUN = 0, тип переменной SUN - это не int, а тип синглтона со значением 0.

...