Skip to content

Lua Loops

Loops are fundamental control structures in programming that allow you to execute a block of code repeatedly. Lua provides several types of loops to handle different iteration requirements.

Conceptually, a loop involves a condition and a body. The body of the loop is executed as long as (or until) the condition meets certain criteria. Most loops also involve a mechanism to eventually make the condition false to avoid infinite execution, unless an infinite loop is intended.

Lua programming language provides the following types of loops:

Loop TypeDescription
while loopRepeats a statement or group of statements as long as a given condition is true. The condition is tested before executing the loop body.
for loop (numeric)Executes a sequence of statements a specific number of times, iterating a control variable through an arithmetic progression.
for loop (generic)Executes a sequence of statements for each element in a collection, using an iterator function (e.g., pairs, ipairs).
repeat…until loopRepeats a statement or group of statements until a given condition becomes true. The condition is tested after executing the loop body, meaning the body always executes at least once.
nested loopsYou can use one or more loops inside another while, for, or repeat...until loop.

Loop control statements change the normal execution flow within loops. Lua provides the break statement.

Control StatementDescription
break statementTerminates the innermost loop ( while, for, or repeat...until) it is in and transfers execution to the statement immediately following that loop.

Lua does not have a built-in continue statement. However, this behavior can often be emulated using if conditions or, in Lua 5.2+, with goto (though goto should be used sparingly).

A loop becomes an infinite loop if its condition never becomes false (for while and for with no natural end) or never becomes true (for repeat...until). The while true do construct is commonly used for intentional infinite loops, often found in server applications or main game loops. A break statement is typically used to exit such loops when a specific condition is met.

while true do
print("This loop will run until explicitly broken.")
-- some_condition would eventually be true to trigger a break
-- if some_condition then
-- break
-- end
-- For this example, we'll just let it print once by breaking immediately
break -- remove this for a true infinite loop (use Ctrl+C to stop)
end
print("Loop finished.")

Practical Application: Infinite loops with break are common in event-driven programming, like waiting for user input or network requests. For example, a simple command-line menu might run in a while true loop, processing commands and breaking when an ‘exit’ command is received.