typestar

or_return y or_else en Odin

El idioma de errores de Odin: los errores son valores comunes, y dos operadores acortan la plomería.

package main

import "core:fmt"

Vault_Error :: enum {
    None,
    Wrong_Combination,
}

open :: proc(guess: int) -> (prize: string, err: Vault_Error) {
    if guess == 628 do return "deed to the tin mine", .None
    return "", .Wrong_Combination
}

// or_return forwards a non-zero error to this proc's own error slot.
heist :: proc() -> Vault_Error {
    prize := open(628) or_return
    fmt.println("inside:", prize)
    return .None
}

main :: proc() {
    if heist() == .None do fmt.println("clean getaway")
    // or_else supplies a fallback when the ok flag is false.
    berths := make(map[string]int)
    defer delete(berths)
    berths["Skua"] = 4
    spot := berths["Tern"] or_else 0
    fmt.println("unknown ships anchor at", spot)
}

Cómo funciona

  1. open devuelve un valor y un Vault_Error; .None es el todo-despejado.
  2. open(628) or_return reenvía cualquier error no-cero a la ranura de error de heist.
  3. berths["Tern"] or_else 0 pone un respaldo cuando la bandera ok es falsa.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
30
Caracteres a escribir
691
Tokens
150
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

Paso 2 de 3 en Idiomas del lenguaje; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →