Bailey Herbert
Bailey Herbert

Reputation: 410

Lua table continues to be empty, even though I am giving it stuff

In my Lua-powered game, I am trying to create an Explorer to see all the instances that have been created. I've created a function inside my DataModel "class" (as I like to call it) that will scan the children of an item, and put it neatly inside a table.

function DataModel.ObjectToTable(obj)
    children = {}

    for i,v in pairs(obj:GetChildren()) do
        table.insert(children, DataModel.ObjectToTable(v))
    end

    print(obj.Name)

    dmyself = {}
    dmyself.Name = obj.Name
    dmyself.Object = obj
    dmyself.Children = children

    print(#dmyself)

    return dmyself
end

The issue is that, the print(#dmyself) is coming out as 0. But as you can see, I just set 3 things inside of it. What could cause such a thing to happen? Am I doing something obviously wrong?

The print(obj.Name) line is returning what it should. I am simply stuck on 'dmyself'.

Upvotes: 1

Views: 197

Answers (1)

Colonel Thirty Two
Colonel Thirty Two

Reputation: 26609

# is the length of the array part of the Lua table; it only takes integer keys into account. More specifically,

The length of a table t is defined to be any integer index n such that t[n] is not nil and t[n+1] is nil; moreover, if t[1] is nil, n can be zero. For a regular array, with non-nil values from 1 to a given n, its length is exactly that n, the index of its last value.

If you use pairs, you can see that your table is not empty. But since there's nothing in the array part of the table, it's length is zero.

Upvotes: 1

Related Questions