lua-users home
lua-l archive

Re: local variables and scope

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


Just to throw in an alternative setup since this stuff although trivial code is a non trivial design decision and I didn't find much discussion when I searched for it before implementing. Essentially I'm doing the same but rather than keeping a table of allowed globals I'm just using rawset with some sugar. Creating a table called global that has a __newindex metatable function that translates into rawset on _G , IE its just sugar for rawset. So whenever I really want to have the ability to create a global var, which is obviously not very often I use global.this="that" Which to my mind reads well since intended global creations are obvious from reading the source but that's personal preference. Probably because I'm using a number of lua modules that get loaded and unloaded changing the available globals during the life of the program. This is what I'm using and so far it doesn't seem to have any obvious problems.
---
local g = {
 __newindex_lock = function () -- set error function
 local mt=getmetatable(_G)
 if not mt then
 mt={}
 setmetatable(_G,mt)
 end
 mt.__newindex = function(t,i,v)
 error("cannot create global variable `"..i.."'",2)
 end
 end
 ,
 __newindex_unlock = function () -- clear error function
 local mt=getmetatable(_G)
 if mt then
 mt.__newindex = null
 end
 end
 }
 setmetatable(g, {
 __index=function(t,i) return rawget(_G,i) end,
 __newindex=function(t,i,v) rawset(_G,i,v) end,
 })
global=g
global.__newindex_lock()
--
Kriss
http://XIXs.com -><- http://www.WetGenes.com

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