Operatori logici

Gli operatori logici sono e, o e non. Come strutture di controllo, tutti gli operatori logici considerano falso e nil come falso e qualsiasi altra cosa come vero. L'operatore e restituisce il suo primo argomento se è falsa; in caso contrario, restituisce il suo secondo argomento. L'operatore o restituisce il suo primo argomento se non è falsa; in caso contrario, restituisce il suo secondo argomento:
stampa (4 e 5) -> 5
stampa (nil e 13) -> nil
stampa (falso e 13) -> false
stampa (4 o 5) -> 4
stampa (false o 5) -> 5
Sia e e o utilizzare la valutazione scorciatoia, cioè, essi valutare il loro secondo operando solo quando necessario.
Un utile linguaggio Lua è x = x o v, che è equivalente a

se non x allora x = v fine
vale a dire, imposta x ad un valore predefinito v quando x non è impostato (condizione che x non è impostato su falso).
Un'altra linguaggio utile è (a, b) oc (o semplicemente un e B o C, perché e ha una priorità più alta rispetto o), che è equivalente all'espressione C

un? b: c
a condizione che b non è falso. Ad esempio, possiamo selezionare un massimo di due numeri x e y con una dichiarazione come
max = (x> y) e xoy
Quando x> y, la prima espressione del ed è vero, così i ei risultati nella sua seconda espressione (x) (che è anche vero, perché è un numero), e poi i o espressione risultati del valore della sua prima espressione, x. Quando x> y è falsa, la e espressione è falsa e quindi l'o risultati nella sua seconda espressione, y.
L'operatore non restituisce sempre vero o falso:

stampa (non zero) -> true
stampa (non false) -> true
stampa (non 0) -> false
stampa (non non nullo) -> false


Operatori relazionali

Lua offre i seguenti operatori relazionali:
<> <=> = == ~ =
Tutti questi operatori risultano sempre vero o falso.
L'operatore == test per l'uguaglianza; l'operatore ~ = è la negazione dell'uguaglianza. Possiamo applicare sia agli operatori di tutti i due valori. Se i valori sono diversi tipi, Lua li considera valori diversi. Altrimenti, Lua li confronta in base alla tipologia. Specificamente, nil è pari solo a se stesso.

Lua confronta tabelle, userdata e le funzioni per riferimento, cioè, due di tali valori sono considerati uguali solo se sono la stessa dell'oggetto. Per esempio, dopo il codice

a = {}; ax = 1; y = 0
b = {}; bx = 1; by = 0
c = a
si dispone che a == c ma un ~ = b.
Possiamo applicare agli operatori di ordine soltanto due numeri o due stringhe. Lua confronta i numeri nel modo consueto. Lua confronta le stringhe in ordine alfabetico, che segue le impostazioni internazionali impostata per Lua. Ad esempio, con il Latin-1 locale europea, dobbiamo "ACAI" <"ACAI" <"acorde". Altri tipi possono essere confrontati solo per l'uguaglianza (e disuguaglianza).

Quando si confrontano i valori con diversi tipi, si deve fare attenzione: Ricordate che "0" == 0 è falso. Inoltre, 2 <15 è ovviamente vero, ma "2" <"15" è falso (ordine alfabetico!). Per evitare risultati incoerenti, Lua genera un errore quando si mescolano stringhe e numeri in un confronto ordine, come ad esempio 2 <"15".