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
union(enum)guarda una variante activa y recuerda cuál es.- El
switchcon capturas saca la carga de la variante que esté viva. .{ .ok = 21.5 }construye una variante con sintaxis de struct anónimo.
Palabras clave y builtins usados aquí
constenumf32fnpubswitchu8unionvoid
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.
Paso 3 de 3 en Structs y enums; paso 15 de 27 en Fundamentos del lenguaje.