[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: A question wrt to-be-closed-variables
- From: Roberto Ierusalimschy <roberto@...>
- Date: Sun, 19 Sep 2021 11:54:31 -0300
> > - If a <local> variable is closed (__close called), it will not be
> > called by the garbagecollector?
>
> No, as easily demonstrated:
>
> [...]
More often than not, the object has an explicit method to close it,
which may also be equal to __gc and __close(*). So, as the OP said, you
need to take care to ensure that closed objects being accessible won't
cause issues. However, correcting the OP, this is often the case
for "traditional" __gc metamethods, too.
First, one can call __gc explcitly through 'getmetatable'. Second, with
some tricks with weak tables, an object may still be accessible even
after it being finalized (__gc called).
So, any object should be robust regarding being accessed or closed again
after being closed, no matter whether it was through an explicit call
to "close", the __close metamethod, or the __gc metamethod.
(*) A small difference between an explicit close vs. __gc and __close
is that the former can raise an error if called over an already
closed object, while the others should not.
-- Roberto