Lua Cheat Sheet: ściąga z Lua
Ostatnia aktualizacja
Hello World i uruchamianie kodu
Lua jest minimalistyczna: uruchamia się nawet pojedyncza instrukcja.
| Operacja | Składnia |
|---|---|
| Wypisanie linii | print("Hello, World!") |
| Wypisanie kilku wartości | print("x", 1, true) |
| Zapis bez nowej linii | io.write("Hi") |
| Komentarz | -- this is a comment |
| Komentarz wieloliniowy | --[[ ... ]] |
| Łączenie łańcuchów | print("Hi " .. name) |
| Uruchomienie pliku | lua app.lua |
| Powłoka interaktywna | lua |
Zmienne i typy
Zmienne są domyślnie globalne; lokalne deklarujesz słowem local.
| Operacja | Składnia |
|---|---|
| Zmienna lokalna | local age = 30 |
| Zmienna globalna | count = 0 |
| Wielokrotne przypisanie | local a, b = 1, 2 |
| Osiem typów | nil, boolean, number, string, table, function, userdata, thread |
| Nil / wartości logiczne | nil, true, false |
| Sprawdzenie typu | type(x) zwraca "number" |
| Zamiana na liczbę | tonumber("42") |
| Zamiana na łańcuch | tostring(42) |
Łańcuchy znaków
Łańcuchy są niemutowalne; działają cudzysłowy pojedyncze i podwójne.
| Operacja | Składnia |
|---|---|
| Długość | #s lub string.len(s) |
| Łączenie | s1 .. s2 |
| Wielkie / małe litery | s:upper(), s:lower() |
| Podłańcuch | s:sub(1, 3) |
| Wyszukanie podłańcucha | s:find("ell") |
| Zamiana (gsub) | s:gsub("a", "b") |
| Formatowanie | string.format("%05d", 42) |
| Długi łańcuch | [[ multi\nline ]] |
Tabele (podstawowa struktura danych)
Tabele to jedyny typ strukturalny w Lua: działają jak tablice, mapy i obiekty.
| Operacja | Składnia |
|---|---|
| Pusta tabela | local t = {} |
| W stylu tablicy (od 1) | local t = {10, 20, 30} |
| Dostęp do elementu tablicy | t[1] (pierwszy element) |
| Tabela w stylu mapy | local u = {name = "Ada", age = 30} |
| Dostęp do wartości mapy | u.name lub u["name"] |
| Ustawienie wartości | t[4] = 40, u.email = "a@x.com" |
| Długość części tablicowej | #t |
| Iteracja po tablicy (ipairs) | for i, v in ipairs(t) do ... end |
| Iteracja po wszystkich kluczach (pairs) | for k, v in pairs(u) do ... end |
| Zagnieżdżona tabela | local m = {a = {1, 2}} |
Sterowanie przepływem
Bloki zamyka się słowem end; fałszywe są tylko nil i false.
| Operacja | Składnia |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| Operatory logiczne | and, or, not |
| Pętla for liczbowa | for i = 1, 10 do ... end |
| For z krokiem | for i = 10, 1, -1 do ... end |
| Pętla while | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| Operator różności | if a ~= b then ... end |
Funkcje
Funkcje są wartościami pierwszej klasy i mogą zwracać wiele wyników.
| Operacja | Składnia |
|---|---|
| Definicja funkcji | function add(a, b) return a + b end |
| Funkcja lokalna | local function square(x) return x * x end |
| Funkcja anonimowa | local f = function(x) return x * 2 end |
| Wiele wartości zwracanych | function bounds() return 1, 10 end |
| Odebranie wielu wyników | local lo, hi = bounds() |
| Funkcja o zmiennej liczbie argumentów | function sum(...) ... end |
| Zebranie argumentów | local args = {...} |
| Metoda (składnia z dwukropkiem) | function obj:greet() ... end |
Biblioteka string
Popularne funkcje z biblioteki string (można je wywołać jako s:fn()).
| Funkcja | Co robi |
|---|---|
string.len(s) | Długość łańcucha |
string.sub(s, i, j) | Podłańcuch od indeksu i do j |
string.upper(s) | Kopia wielkimi literami |
string.rep(s, n) | Powtarza łańcuch n razy |
string.find(s, p) | Szuka wzorca, zwraca początek i koniec |
string.match(s, p) | Zwraca pierwsze dopasowanie wzorca |
string.gsub(s, p, r) | Zastępuje wszystkie dopasowania wzorca |
string.format(fmt, ...) | Formatuje wartości w łańcuch |
Biblioteki table i math
Pomocnicze funkcje do pracy z tabelami w stylu tablic i z liczbami.
| Funkcja | Co robi |
|---|---|
table.insert(t, v) | Dodaje wartość na końcu |
table.insert(t, i, v) | Wstawia v na pozycji i |
table.remove(t, i) | Usuwa i zwraca element z pozycji i |
table.concat(t, ", ") | Łączy elementy w łańcuch |
table.sort(t) | Sortuje tablicę w miejscu |
math.floor(x) / math.ceil(x) | Zaokrąglenie w dół / w górę |
math.max(...) / math.min(...) | Największy / najmniejszy argument |
math.random(1, 6) | Losowa liczba całkowita z zakresu |
Metatabele (w skrócie)
Metatabele pozwalają zmienić zachowanie tabel: operatory, indeksowanie i nie tylko.
| Operacja | Składnia |
|---|---|
| Ustawienie metatabeli | setmetatable(t, mt) |
| Pobranie metatabeli | getmetatable(t) |
| Wartości dla brakujących kluczy | mt.__index = defaults |
| Wartość domyślna przez funkcję | mt.__index = function(t, k) ... end |
| Własne dodawanie | mt.__add = function(a, b) ... end |
| Własne tostring | mt.__tostring = function(t) ... end |
| OOP oparte na prototypach | mt.__index = ClassTable |
Najczęściej używana składnia Lua na jednej stronie. Ten Lua cheat sheet to szybka ściąga z podstaw języka: zmienne i typy, łańcuchy, sterowanie przepływem, funkcje oraz tabele, które są jedyną, elastyczną strukturą danych w Lua, a do tego krótki przegląd bibliotek standardowych i metatabel.
Wszystko tutaj to standardowa Lua, która działa w zwykłym interpreterze. Skopiuj to, czego potrzebujesz, albo uruchom każdy fragment w edytorze online Lua, bez instalacji.
Lua cheat sheet: najczęstsze pytania
Czy ten Lua cheat sheet jest darmowy?
Jak tabela w Lua może być jednocześnie tablicą i mapą?
{10, 20, 30}), tabela zachowuje się jak tablica; gdy używasz kluczy tekstowych ({name = "Ada"}), zachowuje się jak mapa. Możesz nawet łączyć oba style w jednej tabeli. Dlatego Lua potrzebuje tylko jednego typu strukturalnego: tabela obsługuje tablice, słowniki, zbiory i obiekty.Dlaczego Lua indeksuje od 1?
t[1] to pierwszy element, a #t to liczba elementów. Operator długości # i funkcje biblioteczne, takie jak table.insert i ipairs, zakładają tę konwencję, więc trzymanie się jej sprawia, że kod z tablicami działa zgodnie z oczekiwaniami.