[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Lua 5.2 (was: modules, require, magic)
- From: Tony Finch <dot@...>
- Date: Thu, 20 Oct 2011 17:27:56 +0100
Ben Kelly <email@example.com> wrote:
> Personally, what I'll miss most is DSL creation. The ability to swap
> around the caller's environment silently makes it easy to create
> "keyword-like" functions that hugely simplify the structure of
> configuration and game-behaviour files. Having to tack _ENV in front of
> each of those is not only very ugly, it confuses the modders.
> Yeah, I can use debug.setupvalue(), but now I'm using the debug library
> in release code, which last I checked was considered extremely
> inappropriate under any circumstances.
The way to do this is to wrap the script like this
script, script_setenv = load(
[[ return function (...) ]]
.. source ..
[[ end, function (env) _ENV = env end ]]
Then your special keyword-like functions can call the relevant
script_setenv function instead of setfenv. You can fake up a replacement
setfenv like this
script_env_setter[script] = script_setenv
f.anthony.n.finch <firstname.lastname@example.org> http://dotat.at/
Shannon: Southwest 5 to 7, increasing gale 8 at times. Mainly rough.
Occasional rain. Moderate or good, occasionally poor.