Difference between revisions of "NETIO Lua Manual"

From wiki.netio-products.com
Jump to navigation Jump to search
(Založena nová stránka s textem „== Loops == === Numeric for === local arr = {2,3,7,5} for i=1,#arr do logf("%d",arr[i]) end <code><b>for</b> initVar,limit,increment <b>do</b></code> * <…“)
 
(Loops)
Line 9: Line 9:
  
 
=== Generic for ===
 
=== Generic for ===
Most common example (the order of elements in <code>pairs</code> is not guaranteed)
+
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
Line 55: Line 55:
 
  end
 
  end
  
Now return to the most common example above using <code>pairs()</code> Lua function and read about pairs and ipairs implementation [https://www.lua.org/pil/7.3.html here].
+
Now return to the most common example above using <code>pairs()</code> Lua function and read about <code>pairs()</code> and <code>ipairs()</code> implementation [https://www.lua.org/pil/7.3.html here].

Revision as of 10:40, 25 April 2017

Loops

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

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.