Lua Cheat Sheet
Ultimo aggiornamento
Hello World ed esecuzione del codice
Lua è minimale: basta una singola istruzione per eseguire qualcosa.
| Operazione | Sintassi |
|---|---|
| Stampare una riga | print("Hello, World!") |
| Stampare più valori | print("x", 1, true) |
| Scrivere senza andare a capo | io.write("Hi") |
| Commento | -- this is a comment |
| Commento su più righe | --[[ ... ]] |
| Concatenare stringhe | print("Hi " .. name) |
| Eseguire un file | lua app.lua |
| Shell interattiva | lua |
Variabili e tipi
Le variabili sono globali per impostazione predefinita; dichiara quelle locali con local.
| Operazione | Sintassi |
|---|---|
| Variabile locale | local age = 30 |
| Variabile globale | count = 0 |
| Assegnazione multipla | local a, b = 1, 2 |
| Gli otto tipi | nil, boolean, number, string, table, function, userdata, thread |
| Nil / booleani | nil, true, false |
| Controllare il tipo | type(x) restituisce "number" |
| Convertire in numero | tonumber("42") |
| Convertire in stringa | tostring(42) |
Stringhe
Le stringhe sono immutabili; funzionano sia gli apici singoli sia i doppi.
| Operazione | Sintassi |
|---|---|
| Lunghezza | #s oppure string.len(s) |
| Concatenare | s1 .. s2 |
| Maiuscolo / minuscolo | s:upper(), s:lower() |
| Sottostringa | s:sub(1, 3) |
| Trovare una sottostringa | s:find("ell") |
| Sostituire (gsub) | s:gsub("a", "b") |
| Formattare | string.format("%05d", 42) |
| Stringa lunga | [[ multi\nline ]] |
Tabelle (la struttura dati principale)
Le tabelle sono l'unico tipo strutturato di Lua: fanno da array, map e oggetti.
| Operazione | Sintassi |
|---|---|
| Tabella vuota | local t = {} |
| In stile array (indici da 1) | local t = {10, 20, 30} |
| Accedere a un elemento dell'array | t[1] (primo elemento) |
| Tabella in stile map | local u = {name = "Ada", age = 30} |
| Accedere a un valore della map | u.name oppure u["name"] |
| Impostare un valore | t[4] = 40, u.email = "a@x.com" |
| Lunghezza della parte array | #t |
| Iterare l'array (ipairs) | for i, v in ipairs(t) do ... end |
| Iterare tutte le chiavi (pairs) | for k, v in pairs(u) do ... end |
| Tabella annidata | local m = {a = {1, 2}} |
Controllo del flusso
I blocchi si chiudono con end; solo nil e false sono falsi.
| Operazione | Sintassi |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| Operatori logici | and, or, not |
| For numerico | for i = 1, 10 do ... end |
| For con passo | for i = 10, 1, -1 do ... end |
| Ciclo while | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| Operatore di disuguaglianza | if a ~= b then ... end |
Funzioni
Le funzioni sono valori di prima classe e possono restituire più risultati.
| Operazione | Sintassi |
|---|---|
| Definire una funzione | function add(a, b) return a + b end |
| Funzione locale | local function square(x) return x * x end |
| Funzione anonima | local f = function(x) return x * 2 end |
| Più valori di ritorno | function bounds() return 1, 10 end |
| Raccogliere più valori restituiti | local lo, hi = bounds() |
| Funzione variadica | function sum(...) ... end |
| Raccogliere i vararg | local args = {...} |
| Metodo (sintassi con i due punti) | function obj:greet() ... end |
Libreria string
Le funzioni più comuni della libreria string (richiamabili come s:fn()).
| Funzione | Cosa fa |
|---|---|
string.len(s) | Lunghezza della stringa |
string.sub(s, i, j) | Sottostringa dall'indice i a j |
string.upper(s) | Copia in maiuscolo |
string.rep(s, n) | Ripete la stringa n volte |
string.find(s, p) | Trova un pattern, restituisce inizio/fine |
string.match(s, p) | Restituisce la prima corrispondenza del pattern |
string.gsub(s, p, r) | Sostituisce tutte le corrispondenze del pattern |
string.format(fmt, ...) | Formatta valori in una stringa |
Librerie table e math
Helper per lavorare con tabelle in stile array e con i numeri.
| Funzione | Cosa fa |
|---|---|
table.insert(t, v) | Aggiunge un valore in fondo |
table.insert(t, i, v) | Inserisce v alla posizione i |
table.remove(t, i) | Rimuove e restituisce l'elemento in i |
table.concat(t, ", ") | Unisce gli elementi in una stringa |
table.sort(t) | Ordina l'array sul posto |
math.floor(x) / math.ceil(x) | Arrotonda per difetto / per eccesso |
math.max(...) / math.min(...) | L'argomento più grande / più piccolo |
math.random(1, 6) | Intero casuale in un intervallo |
Metatabelle (in breve)
Le metatabelle ti permettono di personalizzare il comportamento delle tabelle: operatori, indicizzazione e altro.
| Operazione | Sintassi |
|---|---|
| Impostare una metatabella | setmetatable(t, mt) |
| Ottenere una metatabella | getmetatable(t) |
| Valore di riserva per le chiavi mancanti | mt.__index = defaults |
| Valore predefinito tramite funzione | mt.__index = function(t, k) ... end |
| Personalizzare l'addizione | mt.__add = function(a, b) ... end |
| Personalizzare tostring | mt.__tostring = function(t) ... end |
| OOP basata su prototipi | mt.__index = ClassTable |
La sintassi di Lua che usi di più, in una sola pagina. Questa cheat sheet di Lua è un riferimento rapido per il linguaggio di base: variabili e tipi, stringhe, controllo del flusso, funzioni e le tabelle, l'unica e flessibile struttura dati di Lua, più uno sguardo alle librerie standard e alle metatabelle.
Tutto quello che trovi qui è Lua standard e gira su un interprete normale. Copia quello che ti serve oppure prova ogni frammento dal vivo nel playground Lua, senza installare nulla.
Domande frequenti sulla cheat sheet di Lua
Questa cheat sheet di Lua è gratuita?
Come fa una tabella Lua a essere sia un array sia una map?
{10, 20, 30}) la tabella si comporta come un array; quando usi chiavi stringa ({name = "Ada"}) si comporta come una map. Puoi anche mescolarle nella stessa tabella. Ecco perché a Lua basta un solo tipo strutturato: la tabella copre array, dizionari, set e oggetti.Perché in Lua gli indici partono da 1?
t[1] è il primo elemento e #t è il numero di elementi. L'operatore di lunghezza # e funzioni di libreria come table.insert e ipairs presuppongono tutti questa convenzione, quindi rispettarla fa funzionare il tuo codice sugli array come ti aspetti.