[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: using a closure for enumerating table
- From: Andrew Starks <andrew.starks@...>
- Date: Sat, 16 Jun 2012 19:25:28 -0500
Sorry for the noise. I noticed some cut and paste errors and I thought
I'd turn it into an actual iterator...
--Begin
#!/usr/bin/env lua
local big =
{ foo = { "sub1_foo","sub2_foo" },
bar = { "sub1_bar", "sub2_bar" }
}
function iter (t)
local k, v,sk, sv
-- can't use syntax of 'iter_func = function()
-- unless you declare 'local iter_func()' prior
local function iter_func()
if type(sk) == "nil" then
--check for next outer-element.
k, v = next(t, k)
if k then --if no outer, then we're done.
sk, sv = next(v, sk)
--< Why I didn't do an anonymous funciton...
return iter_func()
end
else
local old_k, old_sv = k, sv
sk, sv = next(v, sk)
return old_k, old_sv
end
-- we're done iterating here.
return nil
end
--at this point, returning iter_func
--non-locals are k, v, sk, sv and iter_func
return iter_func
end
for k, v in iter(big) do
print(k.. " -> "..v)
end
--End
Okay... back to work... :)