lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



On 18-Aug-04, at 7:01 AM, David Given wrote:

Unfortunately, multiple returns from a function are only concatenated to the
list if the function is the *last* thing on the list. If it's somewhere in
the middle of the list, only the first item is added.

...

Are there any workarounds I can use to fix this? I can have fn() return a
table, in which case the table gets added to the list, but it's still added
as a single item where I actually want the contents of the item instead...

Perhaps you should flatten the table afterwards, if the objects are not themselves tables.


Otherwise, you could use a metamethod:


do local meta = {} function meta:__add(more) for i = 1, table.getn(more) do table.insert(self, more[i]) end return self end

function list(t)
return setmetatable(t or {}, meta)
end
end
-- example
function several(str, count)
local rv = {}
for i = 1, count do table.insert(rv, string.format("%s%i", str, i)) end
return unpack(rv)
end
> return unpack(list{1, 2, 3}+{several("foo", 7)}+{4, 5, 6})
1 2 3 foo1 foo2 foo3 foo4 foo5 foo6 foo7 4 5 6