Lua Academy · Lektion

Hantera tillstånd och fel

Använd lua_pcall för skyddade anrop och hantera fel i C-lagret.

Lektion 4 av 413 steg

Hantera tillstånd och fel är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Flera Lua-tillstånd

Ni kan köra flera instanser av lua_State i samma process. Varje instans är helt självständig: separata globala variabler, separata stackar och inget delat minne som standard.

Trådtillstånd

lua_newthread(L) skapar en underordnad tråd (coroutine) som delar samma globala miljö men har en egen stack. Så implementeras Lua-coroutines i C.

Dela data mellan tillstånd

Data kan inte skickas direkt mellan oberoende Lua-tillstånd. Serialisera data till strängar eller använd delade datastrukturer i C som är åtkomliga via userdata.

Skyddade anrop kontra råa anrop

lua_pcall fångar fel (och använder setjmp/longjmp internt). lua_call vidarebefordrar fel och avbryter programmet. Använd alltid lua_pcall i produktionskod.

// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
  const char *err = lua_tostring(L, -1);
  lua_pop(L, 1);
  // handle error
}

Felobjekt

Fel i Lua kan vara vilket värde som helst – inte bara strängar. error({code=404, msg="not found"}) lägger en tabell som felvärde. C-kod läser den från stacken när pcall misslyckas.

Panic-hanterare

Om ett fel lämnar ett pcall (till exempel från en C-funktion som anropats utan skydd) anropar Lua panic-hanteraren, som har angetts via lua_atpanic(L, fn), innan programmet avbryts.

// C code
lua_atpanic(L, function(lua_State *L) {
  fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
  exit(1);
  return 0;
});

Återställning av stacken vid fel

Efter ett fel i lua_pcall återställs stacken till tillståndet före anropet (minus funktionen och argumenten, plus felobjektet överst).

Rensa upp tillståndet

Stäng alltid tillståndet med lua_close(L) när ni är klara. Detta utlöser alla __gc-finaliserare och frigör allt allokerat minne.

Trådsäkerhet

Ett Lua-tillstånd är inte trådsäkert. Anropa aldrig två C API-funktioner samtidigt på samma tillstånd. Använd ett tillstånd per operativsystemstråd eller ett mutex-lås för att serialisera åtkomsten.

Minnesallokerare

Som standard använder Lua realloc. Ange en anpassad allokerare med lua_newstate(allocFn, ud) för minnesspårning, begränsningar eller anpassade pooler.

Sandlådor med flera tillstånd

Kör opålitlig kod i ett nytt, isolerat Lua-tillstånd där inga standardbibliotek har öppnats. Krascher och resursbrist begränsas då till det tillståndet.

Fråga om felhantering

Vad är skillnaden mellan lua_call och lua_pcall?

Sammanfattning: hantera tillstånd och fel

Använd lua_pcall (aldrig lua_call) i produktionskod. Ange en panic-hanterare för återställning i sista hand. Använd ett tillstånd per tråd. Använd flera isolerade tillstånd för sandlådor. Anropa alltid lua_close för att rensa upp.

Gratis att börja

Lär dig Lua 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
40
Lektioner
159

Vanliga frågor

Är lektionen ”Hantera tillstånd och fel” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Hantera tillstånd och fel”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Hantera tillstånd och fel”?

Använd lua_pcall för skyddade anrop och hantera fel i C-lagret. Ni övar på Lua 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 Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua 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 4 av 4.

Hur lång tid tar lektionen ”Hantera tillstånd och fel”?

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 Lua Academy-lektionen?

Ja. Varje Lua 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

  1. Stackmodellen i Lua:s C-API
  2. Anropa Lua-funktioner från C
  3. Registrera C-funktioner i Lua
  4. Hantera tillstånd och fel
← Tillbaka till Lua Academy