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
comptime T: typerecibe el tipo de elemento en tiempo de compilación.- El cuerpo usa
Tcomo cualquier tipo; cada llamada estampa su propia versión. largest(i32, &ints)ylargest(f64, &floats)ya son dos funciones distintas.
Palabras clave y builtins usados aquí
comptimeconstf64fnfori32ifpubreturntypevarvoid
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.
Paso 2 de 3 en comptime; paso 17 de 27 en Fundamentos del lenguaje.