Logical operators test the relationship of two statements. Logical operators work a little differently in Lua than in other languages. In Lua, anything not false is considered to be true. Only two values represent false for a logical operator, the constant value of false and nil; anything else is true.
The and operator returns its first operand if that operand is false and the second operand if the first operand was true. Here is an example:
x = true and false -- value is false
y = false and false -- value is false
z = true and true -- value is true
w = 7 and 1 -- value is 1
The or operator (or) returns its second operand if it is not false, otherwise it will return the first operand. Here is an example:
x = true or false -- value is true
y = false or false -- value is false
z = true or true -- value is true
w = 7 or 1 -- value is 7
The and/or operators both use shortcut evaluation. This means that the second operand is only evaluated if needed. This is important when the operands are functions. Here is an example:
function TrueFunction()
print ("returning true")
return true
end
function FalseFunction()
print ("returning false")
return false
end
x = FalseFunction() and TrueFunction()
This statement only evaluates the false function. Only returning false is printed. But if we changed the line that assigns x to be the following:
x = TrueFunction() and FalseFunction()
After changing the line, both functions will evaluate, and both returning true and returning false will be printed. Shortcut evaluation can make bugs difficult to spot; for this reason, try to avoid functions as operands when using logical operators.
The logical not operator is a unary operator. It reverses the logical state of its operand. Provided with a value that is false, this operator will evaluate to true. Provided with a value that is true, the operator evaluates to false. Here is an example:
x = not true -- false
y = not true or false -- false
z = not not false -- false
w = not (7 + 1) -- false