Oversigt over Lua-datatyper
Udforsk nil-, boolean-, number-, string-, table-, function- og userdata-typer.
Oversigt over Lua-datatyper er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
Velkommen til Lua
Lua er et let, hurtigt og indlejrbart scriptsprog, der bruges i spilmotorer, webservere og indlejrede systemer. Før du skriver egentlige programmer, skal du forstå, hvordan Lua repræsenterer data.
Lua har 8 grundlæggende typer: nil, boolean, number, string, table, function, userdata og thread. Enhver værdi i Lua tilhører præcis én af disse typer.
-- Check the type of any value with type()
print(type(42)) -- number
print(type("hello")) -- string
print(type(true)) -- boolean
print(type(nil)) -- nilnil: Fravær af en værdi
nil er Luas måde at repræsentere ingenting eller ingen værdi på. Det er den eneste værdi af sin type. Variabler, der aldrig er blevet tildelt en værdi, indeholder automatisk nil.
Hvis du tildeler nil til en global variabel, slettes den reelt. I tabeller fjerner tildeling af nil til en nøgle hele det pågældende opslag.
-- Unassigned variables are nil
print(x) -- nil
x = 10
print(x) -- 10
x = nil
print(x) -- nil (variable is gone)boolean: true og false
Typen boolean har præcis to værdier: true og false. Luas regler for sandhedsværdi er enkle, men vigtige: kun nil og false er falske. Alt andet — herunder tallet 0 og den tomme streng "" — er sandt.
Det adskiller sig fra mange sprog, hvor 0 eller "" betragtes som falske.
-- Lua truthiness examples
if 0 then print("0 is truthy!") end -- prints!
if "" then print("empty str is truthy!") end -- prints!
if nil then print("nil") else print("nil is falsy") end
if false then print("false") else print("false is falsy") endnumber: Heltal og kommatal
Lua 5.3+ har to undertyper af number: integer og float. Heltal er nøjagtige 64-bit-værdier, mens kommatal bruger IEEE 754 dobbeltpræcision. I Lua 5.1/5.2 er alle tal double-værdier.
Funktionen math.type() skelner mellem de to undertyper. Division med / returnerer altid et kommatal, mens // (heltalsdivision) returnerer et heltal, når begge operander er heltal.
print(type(10)) -- number
print(type(10.5)) -- number
print(math.type(10)) -- integer
print(math.type(10.5))-- float
print(10 / 3) -- 3.3333...
print(10 // 3) -- 3 (floor division)string: Tekst i Lua
Strenge i Lua er uforanderlige sekvenser af bytes. Du kan afgrænse dem med enkelte eller dobbelte anførselstegn eller med lange parenteser [[...]] til strenge over flere linjer. Strenge med lange parenteser ignorerer det første linjeskift og bevarer alt andet ordret.
Luas strenge er interned, så identiske strenge deler hukommelse. Længdeoperatoren # returnerer antallet af bytes.
local s1 = 'single quotes'
local s2 = "double quotes"
local s3 = [[multi-line
long string]]
print(#s1) -- 13
print(type(s1)) -- string
print(s1 .. " works") -- concatenation with ..table: Den universelle beholder
Typen table er Luas eneste sammensatte datastruktur, men den er alligevel kraftig nok til at implementere arrays, ordbøger, objekter, mængder og meget mere. Tabeller er associative arrays: De knytter nøgler til værdier, hvor nøgler kan være alle værdier, der hverken er nil eller NaN.
Tabeller oprettes med krøllede parenteser {}. Array-lignende tabeller bruger heltalsnøgler, der begynder ved 1.
-- Array style
local fruits = {"apple", "banana", "cherry"}
print(fruits[1]) -- apple (1-indexed!)
-- Dictionary style
local person = {name = "Alice", age = 30}
print(person.name) -- Alice
print(person["age"]) -- 30function: Førsteklasses værdier
Funktioner i Lua er førsteklasses værdier af typen function. De kan gemmes i variabler, gives som argumenter og returneres fra andre funktioner. Derfor egner Lua sig naturligt til mønstre fra funktionel programmering.
Du kan definere funktioner med nøgleordet function eller tildele anonyme funktioner til variabler. Begge former er ækvivalente.
-- Two equivalent ways to define a function
function greet(name)
return "Hello, " .. name
end
local greet2 = function(name)
return "Hello, " .. name
end
print(type(greet)) -- function
print(greet("Lua")) -- Hello, Luauserdata og thread
userdata repræsenterer vilkårlige C-data, der administreres af værtsprogrammet. Du kan ikke oprette userdata i ren Lua — det kommer fra C-udvidelser eller indlejringsmiljøer som spilmotorer. Det gør det muligt for C-kode at eksponere objekter for Lua-scripts.
thread repræsenterer coroutiner — uafhængige udførelsestråde med deres egne stacks. Vi gennemgår coroutiner i en særskilt lektion. Indtil videre skal du vide, at coroutine.create() returnerer en værdi af typen thread.
-- thread type via coroutine
local co = coroutine.create(function()
print("coroutine body")
end)
print(type(co)) -- thread
-- userdata comes from C, not creatable in pure Lua
-- type(io.stdin) == "file" is a userdata variantBrug af type() til at undersøge værdier
Den indbyggede funktion type() returnerer altid en streng, der angiver typen af dens argument. Det er nyttigt til defensiv programmering og fejlfinding. Du kan sammenligne resultatet direkte med typeangivende strenge.
Bemærk, at type(nil) returnerer strengen "nil", ikke selve værdien nil. Det gør det muligt at kontrollere sikkert, om en variabel indeholder nil, uden fejl.
local values = {42, "hi", true, nil, {}, function() end}
-- Note: nil in table stops ipairs early
for i = 1, 3 do
print(i, type(values[i]))
end
-- 1 number
-- 2 string
-- 3 booleanTypeforskelle fra andre sprog
Hvis du kommer fra JavaScript, Python eller Java, kan nogle få af Luas typeregler overraske dig. Der findes ingen separat heltalstype, som type() viser — både heltal og kommatal returnerer "number". Arrays har ikke deres egen type — de er blot tabeller. Klasser findes ikke — objekter er tabeller med metatabeller.
Hvis du forstår disse forskelle, forebygger du almindelige fejl, når du skifter mellem sprog.
-- No separate array type
local arr = {1, 2, 3}
print(type(arr)) -- table (not array!)
-- No separate integer type visible
print(type(1)) -- number
print(type(1.0)) -- number
-- math.type distinguishes
print(math.type(1)) -- integer
print(math.type(1.0)) -- floatHurtigt tjek
Hvad returnerer type(0) i Lua?
Opsummering: Oversigt over Luas datatyper
Du har lært alle Luas 8 typer:
- nil — fravær af en værdi; falsk
- boolean — true/false; kun nil og false er falske
- number — heltal eller kommatal; brug math.type() til at skelne mellem dem
- string — uforanderlige bytesekvenser; brug .. til at sammenkæde
- table — den universelle beholder til arrays og ordbøger
- function — førsteklasses værdier, der kan gemmes i variabler
- userdata — C-data, der eksponeres for Lua
- thread — håndtag til coroutiner
Næste emne: deklarering af variabler — globalt kontra lokalt scope.
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “Oversigt over Lua-datatyper” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Oversigt over Lua-datatyper”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Oversigt over Lua-datatyper”?
Udforsk nil-, boolean-, number-, string-, table-, function- og userdata-typer. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Oversigt over Lua-datatyper”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Oversigt over Lua-datatyper
- Deklarering af variabler i Lua
- Aritmetiske operatorer og relationsoperatorer
- Typekoercion og -konvertering