[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: iscleared problem in lgc.c
- From: Roberto Ierusalimschy <roberto@...>
- Date: Mon, 23 Mar 2009 10:35:30 -0300
> For userdata being finalized in weak tables, why keep them in keys,
> but not in values?
> Are there special considerations?
Yes. Frequently we associate attributes to an object through a weak table:
T[object] = object_attribute
This object may be a userdata, and this userdata may need this attribute
during its finalization. If Lua removes this entry from the table
(because 'object' is no longer accessible), the __gc metamethod will not
be able to access that data.
On the other hand, as the object is no longer accessible, it does not
make sense to keep it as a value in a table, because Lua should not
have "common" access to it anymore.
(Note that, except for traversals, when the object is a key you need a
previous access to it to access the entry. This is not true when the
object is a value.)
-- Roberto