Kalle Lua-funksjoner fra C
Last inn og kjør Lua-skript og -funksjoner fra C-kode.
Kalle Lua-funksjoner fra C er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Oversikt
For å kalle en Lua-funksjon fra C legger De funksjonen og argumentene på stakken, kaller lua_pcall og leser deretter resultatene fra stakken.
Laste inn et Lua-skript
luaL_dofile(L, filename) laster inn og kjører en Lua-fil. Alternativt kan De bruke luaL_loadfile + lua_pcall for separat lasting og kall.
// C code
if (luaL_dofile(L, "config.lua") != LUA_OK) {
fprintf(stderr, "Error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
}Hente en global funksjon
Bruk lua_getglobal(L, "funcName") for å legge en global Lua-funksjon på stakken.
// C code
lua_getglobal(L, "myFunction"); // push function
lua_pushnumber(L, 10); // push arg1
lua_pushnumber(L, 20); // push arg2lua_pcall
lua_pcall(L, nargs, nresults, errfunc) kaller funksjonen på stakken. Ved suksess returnerer den LUA_OK og lar resultatene ligge på stakken.
// C code
if (lua_pcall(L, 2, 1, 0) != LUA_OK) {
fprintf(stderr, "Call error: %s\n", lua_tostring(L, -1));
lua_pop(L, 1);
} else {
double result = lua_tonumber(L, -1);
lua_pop(L, 1);
printf("Result: %f\n", result);
}Flere returverdier
Angi nresults i lua_pcall for å lese flere returverdier. De legges på stakken i riktig rekkefølge.
// C: calling a Lua fn that returns two values
lua_getglobal(L, "minmax");
lua_pushnumber(L, 5); lua_pushnumber(L, 3);
lua_pcall(L, 2, 2, 0);
double mn = lua_tonumber(L, -2);
double mx = lua_tonumber(L, -1);
lua_pop(L, 2);LUA_MULTRET
Send LUA_MULTRET som nresults for å godta alle returverdiene fra funksjonen. Kontroller lua_gettop(L) etterpå for å se hvor mange som ble returnert.
Feilhåndterer
Send en errfunc som ikke er null til lua_pcall for å bruke en egendefinert feilhåndterer. Håndtereren mottar feilobjektet og kan legge til informasjon om tracebacks.
// C: setup traceback handler
lua_getglobal(L, "debug");
lua_getfield(L, -1, "traceback");
lua_remove(L, -2); // remove debug table
int errhandler = lua_gettop(L);
// push fn and args, then:
lua_pcall(L, nargs, nresults, errhandler);Kalle metoder på objekter
For å kalle en Lua-metode på et objekt legger De metoden, objektet (self) og de øvrige argumentene på stakken, og utfører deretter kallet.
Sende tabeller som argumenter
Opprett en tabell på stakken med lua_newtable, fyll ut feltene med lua_setfield, og ta den deretter med som funksjonsargument.
Referanseregisteret
Bruk luaL_ref(L, LUA_REGISTRYINDEX) for å lagre en Lua-verdi i registeret og få en heltallsnøkkel som kan brukes til å hente den senere.
// C: store a callback for later use
lua_pushvalue(L, callbackIdx);
int ref = luaL_ref(L, LUA_REGISTRYINDEX);
// Later: lua_rawgeti(L, LUA_REGISTRYINDEX, ref);Rydde opp
Fjern alltid ubrukte verdier fra stakken. Ubalanserte stakker hoper seg opp over mange kall og fører til slutt til overflyt. Kontroller stakkstørrelsen i debug-bygg.
Spørsmål om lua_pcall
Hva gjør lua_pcall(L, 2, 1, 0)?
Oppsummering: Kalle Lua fra C
Legg funksjon og argumenter på stakken, kall lua_pcall, kontroller returkoden, og les deretter resultatene fra stakken. Bruk luaL_ref for å lagre Lua-callbacks til senere. Fjern alltid ubrukte verdier fra stakken.
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Kalle Lua-funksjoner fra C» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Kalle Lua-funksjoner fra C», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Kalle Lua-funksjoner fra C»?
Last inn og kjør Lua-skript og -funksjoner fra C-kode. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Kalle Lua-funksjoner fra C»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Stakkmodellen i Lua C API
- Kalle Lua-funksjoner fra C
- Registrere C-funksjoner i Lua
- Håndtere tilstand og feil