Enums

Las enums de Zig te permiten definir tipos con un conjunto restringido de valores nombrados.

Vamos a declarar una enum.

const Direction = enum { north, south, east, west };

Los tipos de enums pueden tener tipos de etiqueta especificados (enteros).

const Value = enum(u2) { zero, one, two };

Los valores ordinales de las enums comienzan en 0. Se pueden acceder con la función integrada @intFromEnum.

test "valor ordinal de la enum" {
    try expect(@intFromEnum(Value.zero) == 0);
    try expect(@intFromEnum(Value.one) == 1);
    try expect(@intFromEnum(Value.two) == 2);
}

Los valores pueden ser anulados, con los siguientes valores continuando desde allí.

const Value2 = enum(u32) {
    hundred = 100,
    thousand = 1000,
    million = 1000000,
    next,
};

test "establecer valor ordinal de la enum" {
    try expect(@intFromEnum(Value2.hundred) == 100);
    try expect(@intFromEnum(Value2.thousand) == 1000);
    try expect(@intFromEnum(Value2.million) == 1000000);
    try expect(@intFromEnum(Value2.next) == 1000001);
}

Las enums pueden tener métodos. Estos actúan como funciones con nombres de espacio que pueden ser llamadas con la sintaxis de punto.

const Suit = enum {
    clubs,
    spades,
    diamonds,
    hearts,
    pub fn isClubs(self: Suit) bool {
        return self == Suit.clubs;
    }
};

test "método de la enum" {
    try expect(Suit.spades.isClubs() == Suit.isClubs(.spades));
}

Las enums también pueden tener declaraciones var y const. Estas actúan como variables globales con nombres de espacio y sus valores no están relacionados ni adjuntos a instancias del tipo enum.

const Mode = enum {
    var count: u32 = 0;
    on,
    off,
};

test "hmm" {
    Mode.count += 1;
    try expect(Mode.count == 1);
}
Edita esta pagina Última actualización: 5/15/2024 por Vital