Sign in to follow this  
gabrielauditore

[LUA] setenv is nill?

Recommended Posts

Hi guys, i'm trying to make some easy lua encapsulation code, so far i have a base class
[CODE]
-- Auto generate begin
BaseClass = {}
function BaseClass:new(object)
object = object or {}
setmetatable(object, self)
self.__index = self
return object
end
setmetatable(_G, {
__newindex = function(t, k, v)
BaseClass[k] = v
end,
__index = function(t, k)
return BaseClass[k]
end
})
-- Auto generate end
function PrintX(self)
setenv(1, self)
print (x)
end
-- Auto generate begin
setmetatable(_G, nil)
-- Auto generate end
[/CODE]

and then a test file that uses it
[CODE]
variable1 = BaseClass:new()
variable2 = BaseClass:new()
variable1.x = 10
variable1:PrintX()
variable2:PrintX()
[/CODE]

Basically anything within the --autogenerate comments would be written by a pre-processor macro, so end users could write code, and anything within a file would automatically be added to a class.

if you take a look inside the printX function i'm trying to set the current global environment to self, that is while the function is executing x should reference self.x (The setenv function would be added by a pre-processor as well).

However when i run this piece of code i get the following output [b]attempt to call global 'setenv' (a nil value)[/b]
I think this is because instead of calling _G.setenv my code is actually calling BaseClass.setenv, but rawget(_G, "setenv") return nil

Any ideas on how to solve this issue?

[size=6]EDIT,[/size] 2 things
First, i had a typo. It's setfenv not setenv.
Second the following code fails (I'm using the command line interpreter from the lua site)
[CODE]
function test()
local newgt = {}
setmetatable(newgt, {__index = _G})
setfenv(1, newgt)
end
[/CODE]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this