lua-users home
lua-l archive

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

Forgive me if this has been done before, but why isn't this construct

real = { };
setmetatable(real, {__index = _G});
local sub = {};
setmetatable(sub, {__index = real, __newindex = function(tab, key, value)
  if not tab[key] then
      error("cannot create global");
    real[key] = value;
setfenv(1, sub);
real.hi = 5; -- create a global
print(sub.hi); --> 5
hi = "hello"; --changing an existing global is ok
print(real.hi); --> hello
k = 6; --> stdin:1: cannot create global

-Patrick Donnelly

"One of the lessons of history is that nothing is often a good thing
to do and always a clever thing to say."

-Will Durant