[LUA] setenv is nill?

This topic is 2540 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

Hi guys, i'm trying to make some easy lua encapsulation code, so far i have a base class
 -- 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 

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

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 attempt to call global 'setenv' (a nil value)
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?

EDIT, 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) function test() local newgt = {} setmetatable(newgt, {__index = _G}) setfenv(1, newgt) end 

Share on other sites
Lua 5.2 no longer supports setfenv. It isntead has a _ENV variable

1. 1
2. 2
3. 3
Rutin
15
4. 4
5. 5

• 10
• 9
• 9
• 11
• 11
• Forum Statistics

• Total Topics
633691
• Total Posts
3013343
×