Difference between revisions of "NETIO Lua Manual"
Jump to navigation
Jump to search
(→Generic for) |
|||
Line 25: | Line 25: | ||
=== Generic for === | === Generic for === | ||
− | Most common example (the order of elements in <code>pairs()</code> is not guaranteed) | + | Is rather sophisticated. Most common example (the order of elements in <code>pairs()</code> is not guaranteed): |
local tab = {one=1, two=2, three=3} | local tab = {one=1, two=2, three=3} | ||
for key,val in pairs(tab) do logf("%s:%d",key,val) end | for key,val in pairs(tab) do logf("%s:%d",key,val) end |
Revision as of 09:54, 25 April 2017
Loops
While
While syntax is not different to other languages:
local i = 0 while i~=3 do i = i + 1 logf("%d",i) end
Repeat until
Repeat until syntax is the same as Pascal's, other languages have similar do-while loops:
local i = 0 repeat i = i + 1 logf("%d",i) until i==3
Numeric for
local arr = {2,3,7,5} for i=1,#arr do logf("%d",arr[i]) end
for initVar,limit,increment do
- number assignment
initVar
inits loop-local variable - number
limit
loops until initVar reaches this value - optional number
increment
after each loop initVar increment by this value (default 1)
Generic for
Is rather sophisticated. Most common example (the order of elements in pairs()
is not guaranteed):
local tab = {one=1, two=2, three=3} for key,val in pairs(tab) do logf("%s:%d",key,val) end
Generic for syntax
for var_1, ..., var_n in explist do block end
is equivalent to (Full explanation here.)
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
Iterator closure that holds its state
function iter(a) local i = 0 return function() i = i+1 return a[i] end end local arr = {2,3,7,5} for value in iter(arr) do logf("%d",value) end
Stateless iterator (in this case returns variable list: key and value)
function iter(a,i) i = i+1 if a[i] then return i,a[i] end end local arr = {2,3,7,5} for k,v in iter,arr,0 do logf("%d:%d",k,v) end
Same effect using ipairs()
Lua function (without initial state)
for k,v in ipairs(arr) do logf("%d:%d",k,v) end
Now return to the most common example above using pairs()
Lua function and read about pairs()
and ipairs()
implementation here.