The boolean type in Lua has the two traditional boolean values: true
and false
. These values can be assigned to a variable, combined with logical operators (and
, or
, not
) and used in conditional tests (e.g. in control structures).
local is_true = true
local is_false = false
true and true --> true
true and false --> false
false or true --> true
false or false --> false
not false --> true
not true --> false
-- prints 0
if is_true == true then
print(0)
else
print(1)
end
Conditional tests and the logical operators consider both the boolean false
and nil
as false and anything else as true.
1 and 2 --> 2
nil and 2 --> nil
false and 2 --> false
1 or 2 --> 1
false or 'hello' --> "hello"
nil or false --> false
Both and
and or
uses short-circuit evaluation, which means they evaluate their second operand only when necessary. All operations are evaluated according to the operator precedence, where not
is evaluated before and
and or
.
Given that only false
and nil
are considered false and everything else is true a common idiom in Lua is:
x = x or y
This is equivalent to:
if not x then
x = y
end
It is pretty common to use this in functions, to assign a default value if a parameter has no value (is nil
):
local function hello(name)
name = name or "World"
print("Hello " .. name)
end
hello() --> "Hello World"
hello('Mars') --> "Hello Mars"