Operadores lógicos

Os operadores lógicos em Lua são and, or e not. Assim como as estruturas de controle (consulte Estruturas de controle), todos os operadores lógicos consideram falso e nulo como falso e qualquer outra coisa como verdadeira.

O operador de negação nem sempre retorna falso ou verdadeiro. O operador de conjunção and retorna seu primeiro argumento se esse valor for falso ou nulo; caso contrário, and retorna seu segundo argumento. O operador de disjunção or retorna seu primeiro argumento se esse valor for diferente de null e false; caso contrário, or retorna seu segundo argumento. Ambos and e or usam avaliação de atalho, ou seja, o segundo operando é avaliado somente se necessário. A seguir estão alguns exemplos:
±------------------±--------------±--------------±-----------±-----------+
| 10 | > or | > 20 | | > --> 10 |
±------------------±--------------±--------------±-----------±-----------+
| 10 | > or | > error() | > --> 10 | |
±------------------±--------------±--------------±-----------±-----------+
| null or “a” | > --> “a” | | | |
±------------------±--------------±--------------±-----------±-----------+
| null and | 10 | > --> null | | |
±------------------±--------------±--------------±-----------±-----------+
| false and error() | > --> false | | | |
±------------------±--------------±--------------±-----------±-----------+
| false and | null | > --> false | | |
±------------------±--------------±--------------±-----------±-----------+
| false or | | > --> null | | |
±------------------±--------------±--------------±-----------±-----------+
| 10 | > and 20 | | > --> 20 | |
±------------------±--------------±--------------±-----------±-----------+

--> indica o resultado da expressão anterior.