@TypeOf och typreflektion
Inspektera typer för att förbli generisk
@TypeOf och typreflektion är en gratis lektion i Zig Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Zig Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Zig Academy innehåller totalt 4 lektioner.
Fråga om typer
Generisk kod behöver ofta känna till typen för ett värde utan att du skriver ut den. Zig löser detta med den inbyggda funktionen @TypeOf. 🔍
@TypeOf returnerar en typ
Ge @TypeOf ett eller flera uttryck så returnerar den deras typ, helt beräknad vid kompileringen.
const T = @TypeOf(value);Uttrycket körs inte
Argumentet till @TypeOf inspekteras bara och körs aldrig. Även ett funktionsanrop inuti det undersöks, men körs inte i praktiken.
Fånga typen för en parameter
Inuti en generisk funktion kan du namnge typen för vilket argument som helst och återanvända den, till exempel för att deklarera en matchande local variabel.
fn echo(x: anytype) void {
const T = @TypeOf(x);
_ = T;
}Hämta ett läsbart namn
Den inbyggda funktionen @typeName omvandlar en typ till en läsbar sträng, vilket är praktiskt vid felsökningsutskrifter eller felmeddelanden.
const name = @typeName(i32);Djupare reflektion med @typeInfo
För fullständig information returnerar @typeInfo en taggad union som beskriver typen: om den är ett heltal, en struct, en pekare och mycket mer.
const info = @typeInfo(i32);Välj gren utifrån typens sort
Eftersom resultatet är en tagged union kan du använda switch på det för att hantera heltal, flyttal och structar på olika sätt i en och samma generiska funktion.
switch (@typeInfo(T)) {
.int => {},
else => {},
}Läs ett heltals bitbredd
När en typ är ett heltal innehåller dess information fält som bits och teckenstatus, så att du kan anpassa logiken efter den exakta bredden.
const bits = @typeInfo(u16).int.bits;Reflektion håller koden generisk
Genom att inspektera typer i stället för att hårdkoda dem kan en funktion fungera korrekt för många indatatyper. Det är kärnan i Zigs reflection. ✨
Allt sker vid kompileringen
Alla inbyggda reflektionsfunktioner körs under bygget, så denna introspektion tillför ingen run-time-omkostnad till det färdiga programmet.
Lista en structs fält
För en struct exponerar @typeInfo en fältarray som du kan loopa över vid kompileringen för att läsa varje fälts namn och typ.
const fields = @typeInfo(Point).@"struct".fields;Snabbkontroll
Inuti en generisk funktion har du ett värde x och vill veta dess typ. Vilken inbyggd funktion ger dig den?
Sammanfattning
Använd @TypeOf för att ta reda på ett värdes typ och @typeInfo för att undersöka dess struktur. Genom att använda switch på denna information kan en funktion anpassa sig till många typer. 🎯
Lär dig Zig med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”@TypeOf och typreflektion” gratis?
Ja – hela texten till ”@TypeOf och typreflektion” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Zig Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Zig Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”@TypeOf och typreflektion”?
Inspektera typer för att förbli generisk Ni övar på Zig Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Zig Academy?
Du behöver inga förkunskaper. Utbildningen i Zig Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”@TypeOf och typreflektion”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Zig Academy-lektionen?
Ja. Varje Zig Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Funktioner som tar en typ
- Generiska datastrukturer
- @TypeOf och typreflektion
- anytype-parametrar