|
|
||
|
You can keep the original 'arg' using a setfenv trick in Lua 5.1:
function dofile(filename, ...)
local env = setmetatable({ arg = {[0] = filename, ...} },
{ __index = _G, __newindex = _G })
return setfenv(assert(loadfile(filename)), env)(...)
end
This will look up 'arg' in the 'env' table, and everything else
(including writes) will be done in '_G'.
I find arg[-1] (the name of the Lua executable) to be very useful, here's a version that preserves that value in the arg table:
function dofile(filename, ...)
local env = setmetatable({ arg = {
[-1] = arg and arg[-1], -- Lua executable
[0] = filename, -- Lua script
... -- Script arguments
}},
{ __index = _G, __newindex = _G })
return setfenv(assert(loadfile(filename)), env)(...)
end
- Peter Odding