[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Deprecating setfenv()
- From: Peter Odding <peter@...>
- Date: Sun, 10 Jan 2010 11:59:20 +0100
Peter Odding wrote:
Can anyone tell me whether there is a way to accomplish the goal of
separating the module environment from the module table in Lua 5.2.0
(work1) without using the debug library?
After posting the previous message I came up with the following solution
which is actually quite straightforward, it just took me a while to get
used to the new "in t do ... end" statement. Sorry for the noise :-)
-- $HOME/lua-5.2.0-work1/test.lua
package.path = '/home/peter/lua-5.2.0-work1/modules/?.lua'
require 'test'
assert(test.fun() == 42)
assert(test.print == nil)
-- $HOME/lua-5.2.0-work1/modules/test.lua
local setmetatable, _G = setmetatable, _G
local mobtbl = module(...)
in setmetatable({}, {
__index = function(_, k) return mobtbl[k] or _G[k] end,
__newindex = function(_, k, v) mobtbl[k] = v end,
}) do
function fun()
print 'it works'
return 42
end
end
- Peter Odding