typestar

Uniones rotuladas en Zig

Una lectura, dos formas: un float cuando el sensor funciona, una razón cuando no.

const std = @import("std");

// A tagged union holds one variant and remembers which one.
const Reading = union(enum) {
    ok: f32,
    fault: []const u8,
};

fn report(r: Reading) void {
    switch (r) {
        .ok => |temp| std.debug.print("steady at {d:.1} C\n", .{temp}),
        .fault => |why| std.debug.print("sensor down: {s}\n", .{why}),
    }
}

pub fn main() void {
    report(.{ .ok = 21.5 });
    report(.{ .fault = "loose wire" });
}

Cómo funciona

  1. union(enum) guarda una variante activa y recuerda cuál es.
  2. El switch con capturas saca la carga de la variante que esté viva.
  3. .{ .ok = 21.5 } construye una variante con sintaxis de struct anónimo.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
409
Tokens
128
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 118 segundos.

Escribe este fragmento

Paso 3 de 3 en Structs y enums; paso 15 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →