[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Tables, Metatables, Children, and Length
- From: Dirk Laurie <dirk.laurie@...>
- Date: Tue, 4 Dec 2012 07:12:49 +0200
2012/12/4 Marc Lepage <mlepage@antimeta.com>:
> Hi, I have a table which has a metatable. I want to add children
> (other tables) to the metatable, not to the table directly.
>
> If I do so, I can get at them by t[1], t[2], t[3] and so on.
>
> But I can't do this:
>
> for i = 1, #t do
> local child = t[i]
> end
>
> Because #t still returns 0.
>
> Comments and feedback welcome.
...
> I forgot to mention I'm using Lua 5.1.
Which does not have an __ipairs metamethod.
But you can still do this (adapted from PiL 7.3):
local function iter(a,i)
i=i+1
local v=rawget(getmetatable(a),i)
if v then return i,v end
end
local function ipairs(a) return iter,a,0 end
getmetatable(t).ipairs = ipairs
for k,v in t:ipairs() do print(k,v) end
BTW why do you use the metatable for this purpose instead of
a transparent proxy table as in PiL 13.4?