Wo Lua zu Hause ist Bereich Beispiel Spiele Roblox (Luau), Love2D , Defold, Solar2D, Garry's Mod, World of Warcraft-AddonsEditoren Neovim (Konfiguration und Plugins), WiresharkServer OpenResty/nginx , Redis (Skripte), KongEingebettet Router, Embedded-Geräte, Adobe Lightroom
Das Einbetten in C ist Luas ursprünglicher Zweck: Die Host-Anwendung stellt Funktionen bereit, Nutzer skripten das Verhalten.
Beispiel · text Kopieren // C-Seite (Prinzip)
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "spiele_sound", meine_c_funktion);
luaL_dofile(L, "level1.lua");
lua_close(L);Love2D: ein Spiel in wenigen Zeilen Beispiel · text Kopieren -- main.lua
local spieler = {x = 100, y = 100, tempo = 200}
function love.update(dt)
if love.keyboard.isDown("right") then spieler.x = spieler.x + spieler.tempo * dt end
if love.keyboard.isDown("left") then spieler.x = spieler.x - spieler.tempo * dt end
end
function love.draw()
love.graphics.rectangle("fill", spieler.x, spieler.y, 32, 32)
love.graphics.print("Pfeiltasten bewegen den Block", 10, 10)
endNeovim konfigurieren Beispiel · text Kopieren -- ~/.config/nvim/init.lua
vim.opt.number = true
vim.opt.tabstop = 4
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>w", ":w<CR>", { desc = "Speichern" })
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*.lua",
callback = function() vim.lsp.buf.format() end,
})Standardbibliothek im Überblick Bibliothek Wichtige Funktionen stringlen sub upper lower find match gmatch gsub format rep reverse byte chartableinsert remove concat sort unpack pack movemathfloor ceil sqrt abs max min random randomseed pi huge tointeger typeostime date clock getenv remove rename tmpname exitioopen read write lines closeutf8char codepoint len codes offsetcoroutinecreate resume yield status wrap isyieldableGlobal print type tostring tonumber pairs ipairs next select assert error pcall xpcall setmetatable getmetatable require load
Beispiel · lua Kopieren math.randomseed (42 )
local z = math.random (1 , 6 )
print (z >= 1 and z <= 6 , math.random () < 1 , math.huge > 1e308 , -math.huge)
print (os.getenv ("GIBT_ES_NICHT_12345" ), os.clock () >= 0 , type (os.time ()))
print (load ("return 1 + 2" )())
print (select ("#" ), #arg >= 0 )Ausgabe
true true true -inf
nil true number
3
0 true Leistung und Werkzeuge LuaJIT : sehr schneller JIT-Compiler (Lua 5.1-kompatibel), z. B. in OpenRestyLuau : Roblox' Variante mit TypannotationenLuaRocks : Paketmanager (luarocks install lpeg)busted , luaunit : Tests; luacheck : Linter; StyLua : FormatiererMessen: os.clock(); Tabellen vorab dimensionieren (table.move), Schleifen lokal halten Häufige Fehler Problem Ursache / Lösung attempt to index a nil valueVariable oder Feld ist nil: vorher prüfen (t and t.x) attempt to perform arithmetic on a nil valuenicht initialisierte Variable attempt to compare number with nilgleiche Ursache beim Vergleichen Variable "verschwindet" fehlendes local macht sie global (oder umgekehrt) #t liefert falsche LängeTabelle mit Lücken (nil-Werte); Lua garantiert dann nichts Reihenfolge bei pairs wechselt pairs ist ungeordnet: Schlüssel sortieren!= funktioniert nichtrichtig ist ~= Listen starten bei 0 in Lua bei 1
Weiterlernen Programming in Lua (Roberto Ierusalimschy, online frei: lua.org/pil)Referenzhandbuch lua.org/manual Love2D-Wiki (love2d.org), Neovim-Dokumentation :help lua-guide Übungen: Exercism (Lua-Track), Advent of Code Merke Lua = Tabellen + Funktionen + Coroutinen, in wenigen Seiten erlernbar local verwenden, Indizes ab 1, ~= für ungleichMetatabellen ermöglichen OOP, Operatoren und Standardwerte Einsatz in Spielen, Neovim, nginx, Embedded