[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: table question
- From: William Roper <lacutis@...>
- Date: Mon, 26 Jul 2004 08:49:41 -0700
The problem is that you are expecting c to be nil. c is a table that
you are putting an item at index 1 with the value "test" in it.
Setting t[1] to nil makes the item 1 in table t not link to your new
table object o, that is also referenced to by c.
Thats pretty confusing now that I reread it.
To put it in C terms.
you create a new object (o), and assign the pointer c to it.
so c holds the address of o. While creating it, you set one of the
elements of an array (t) also to point at the o address.
By then setting t[1] to null, c still points at it, and it won't be
garbage collected.
You need to:
t[1] = nil
c = nil
Then the table will garbage collect.
Hope that helps.
Ryan
On Mon, 26 Jul 2004 09:53:11 -0500, Michael Cumming <mike@4831.com> wrote:
> I am using Lua 4 and LuaCom. I would like to maintain a "master" table of all open objects. I have been playing around with some Lua code to see how tables are handled. The code below is a quick and dirty test of creating an object which is returned to the caller and also stored in a master table. I would like to be able to "destroy" the object by iterating the master table. But if I set an the object in the master table to to nil, the table returned to the caller still exists. Is there a way around this?
>
> t = {} -- master list of open objects
>
> function newobject ()
> local o
> o = {"test"} -- normally would be "creatobject"
> tinsert (t,o)
> return o
> end
>
> c = newobject ()
>
> print (c)
> print (t [1])
>
> t [1] = nil
>
> print (c)
> print (t [1])
>
> OUTPUT
>
> table: 0157B360
> table: 0157B360
> table: 0157B360
> nil
>
> Thanks,
>
> Mike
>
>
>
>