Errores y try en Zig
Los errores son valores en el tipo de retorno: una bóveda que abre o dice por qué no.
const std = @import("std");
const VaultError = error{WrongCombination};
fn open(guess: u32) VaultError![]const u8 {
if (guess == 628) return "deed to the tin mine";
return VaultError.WrongCombination;
}
pub fn main() !void {
// try unwraps a success or returns the error to the caller.
const prize = try open(628);
std.debug.print("inside: {s}\n", .{prize});
// if with an else-capture inspects the failure instead.
if (open(111)) |p| {
std.debug.print("inside: {s}\n", .{p});
} else |err| {
std.debug.print("no luck: {s}\n", .{@errorName(err)});
}
}
Cómo funciona
error{WrongCombination}declara el conjunto de errores;!lo mete al tipo de retorno.try open(628)desenvuelve el éxito o devuelve el error escaleras arriba.if (...) |p| ... else |err|captura el lado que de verdad ocurrió.
Palabras clave y builtins usados aquí
constelseerrorfnifpubreturntryu32u8void
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 553
- Tokens
- 142
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 122 segundos.
Paso 1 de 3 en Errores; paso 7 de 27 en Fundamentos del lenguaje.