typestar

Genéricos en Zig

Un genérico es una función que recibe un tipo: un solo largest() para enteros y floats.

const std = @import("std");

// A generic is just a function that takes a type at compile time.
fn largest(comptime T: type, items: []const T) T {
    var best = items[0];
    for (items[1..]) |x| {
        if (x > best) best = x;
    }
    return best;
}

pub fn main() void {
    const ints = [_]i32{ 3, 41, 12, 55 };
    const floats = [_]f64{ 2.5, 8.75, 1.25 };
    std.debug.print("largest int: {d}\n", .{largest(i32, &ints)});
    std.debug.print("largest float: {d}\n", .{largest(f64, &floats)});
}

Cómo funciona

  1. comptime T: type recibe el tipo de elemento en tiempo de compilación.
  2. El cuerpo usa T como cualquier tipo; cada llamada estampa su propia versión.
  3. largest(i32, &ints) y largest(f64, &floats) ya son dos funciones distintas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
465
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 comptime; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →