lualua-table

Lua returns only empty tables


I have a code:

function subsets(t)
    local res={}
    local res_t={}
    function subs(i)
        if i>#t then
            res[#res+1]=res_t
            return 
        end
        res_t[#res_t+1]=t[i]
        subs(i+1)
        table.remove(res_t)
        subs(i+1)
    end
subs(1)
return res
end

i want it to return results which is table with tables with arrays but it returns me table with empty tables, idk if i wrote it right but res table is non-empty inside a function but empty as final result:

1   table: 000002721a66a3f0
2   table: 000002721a66a3f0
3   table: 000002721a66a3f0
4   table: 000002721a66a3f0
5   table: 000002721a66a3f0
6   table: 000002721a66a3f0
7   table: 000002721a66a3f0
8   table: 000002721a66a3f0

all this tables are empty, like all tables are overwritten by final table which comes out empty

i want to understand what's wrong with function, im new to programming and really appreciate some help


Solution

  • The reason is quite simple. Tables in Lua are passed by reference, therefore, res_t remains the same table throughout the entire process of calling subsets. You appended t[i], then removed it, so finally res_t is naturally empty.

    When you need to use res_t as a result, you should clone it. Here is a concise method:

    res[#res+1]={table.unpack(res_t)}