lua-users home
lua-l archive

Re: setfenv/getfenv

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Roberto Ierusalimschy wrote:
If I undestood you correctly, this is precisely the goal of the new
function 'loadin'.
I'm probably saying something silly, but could it be possible to avoid the loadin() problems by setting the environment when the loaded chunk is executed, as opposed as when it is loaded?
 -- wish I could do this
 local t = {}
 local s = "function f() a = 3 print(a) end"
 local chunk = assert(loadstring(s))
 -- chunk is currently executed in the global env,
 -- I'd like to execute it in 't'
 in t do chunk() end -- no effect in 't'
Currently this sets 'f' and 'a' in the global environment (not in t), as does this variant:
 -- wish I could do this
 local t = { loadstring = loadstring, assert = assert }
 in t do
 local s = "function f() a = 3 print(a) end"
 -- loadstring loads in the global env anyway --
 local chunk = assert(loadstring(s))
 loadstring = nil; assert = nil -- remove from environment
 -- chunk is currently executed in the global env --
 -- I'd like to execute it in 't'
 chunk() -- no effect in 't'
 end
In other terms, would it be problematic to allow setting the environment of a loaded chunk when it is executed, rather than at load time?
 Enrico

AltStyle によって変換されたページ (->オリジナル) /