Blocks & control flow¶
Explicit blocks¶
Blocks can be explicitly delimited by enclosing a series of statements in curly brackets.
{
var x = 1 -- only visible inside the block
print(x)
}
is translated to
do
local x = 1
print(x)
end
If, while, repeat¶
Control structures work the same way in Hurdy as they do in Lua,
with the difference that word delimiters for blocks (e.g., do ... end) are replaced with
C-style curly brackets.
if expr1 {
...
}
elseif expr2 {
...
}
else {
...
}
while expr {
...
}
repeat {
...
}
until expr
Curly brackets are optional if the block containes a single statement:
if x == true
print("True!")
For loops¶
The same applies to for loops, both numeric and generic
for x = 1, #t {
...
}
for k,v in ipairs(t) {
...
}
Curly brackets are optional if the block containes a single statement.
Continue statement¶
Hurdy includes a continue statement that can be used to skip to the end of the current
iteration of a loop. This features requires a version of Lua that supports the goto statement.
Internally this works by translating the continue to goto continue and adding a ::continue::
label at the end of the loop:
for i = 1, 10 {
if i == 2 continue
print(i)
}
is translated to the Lua code
for i = 1, 10 do
do
if i == 2 then goto continue end
print(i)
end
::continue::
}
The inner block of the loop in enclosed in an additional explicit block to allow nested
continue statements.
Break & return¶
break and return statements work the same as in Lua, with the difference that
when compiled they are always wrapped in a do ... end block. This allows to return or break
in the middle of a block/chunk.