[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Function environment table interface
- From: Peter Cawley <lua@...>
- Date: Mon, 6 Jul 2009 21:30:43 +0100
Firstly, environment tables are per-function, whereas all functions
share a single metatable, so function environments could not be set
via metatable. Secondly, separating the environment from the metatable
allows for one to be per-instance and one to be per-class. In the case
of full userdata, if environment tables were set via metatable, then
the common paradigm of setting the metatable to the userdata's class
and the environment table for per-instance data would no longer work,
as the environment table could not be set per-instance without the
metatable being per-instance.
On Mon, Jul 6, 2009 at 9:20 PM, Rob Kendrick<lua-l@nun.org.uk> wrote:
> Hi,
>
> I just had a thought; why are function environments not implemented via
> a field in a metatable? For example;
>
> setmetatable(func, { _env = sometable })
>
> rather than;
>
> setfenv(func, sometable)
>
> While I can't see how it makes any functional difference to how they
> are done, it does mean there is only one interface the programmer has
> to remember rather than one, as well as removing two functions that
> pollute the global namespace. It also feels more orthogonal and
> consistent.
>
> What am I missing?
>
> B.
>