forked from blitmap/lua-snippets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
for-loops.lua
59 lines (43 loc) · 1.14 KB
/
for-loops.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
--[[
The numeric for loop repeats a block of code while a control variable
runs through an arithmetic progression. It has the following syntax:
-- e1, e2, and e3 are evaluated only once before the loop.
]]
for v = e1, e2, e3 do
--[[ block ]]
end
-- Equivalent to:
do
local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
if not (var and limit and step) then error() end
while
(step > 0 and var <= limit) or
(step <= 0 and var >= limit)
do
local v = var
--[[ block ]]
var = var + step
end
end
--[[
The generic for statement works over functions, called iterators. On each
iteration,the iterator function is called to produce a new value, stopping
when this new value is nil. The generic for loop has the following syntax:
-- explist is evaluated only once (e.g. for i, v in ipairs(table) do ... end)
-- ipairs() is called and returns an iterator only once (ipairs() is a generator)
]]
for var_1, ···, var_n in explist do
--[[ block ]]
end
-- Equivalent to:
do
local f, s, var = explist
while true do
local var_1, ···, var_n = f(s, var)
var = var_1
if var == nil then
break
end
--[[ block ]]
end
end