Pessoal, usando setmetatable, eu consigo definir uma metatabela para o ambiente global _G,
permitindo, por exemplo, que ao tentar acessar um valor que não existe, seja gerado um erro.
Por exemplo, se eu tentar fazer print(x) sendo que x não existem, não será impresso nil
e sim gerado um erro indicando que x não existe.
No entanto, quero fazer a mesma coisa para as variáveis locais do escopo atual.
Tentei usar o código que fiz, que funciona para o ambiente global, adaptando-opara o ambiente local.
Pra mim, a lógica está correta, mas não funciona.
Pesquisei no google e no grupo mas não encontrei nada a respeito.
Segue o código, se alguém puder ajudar.
do
--obtém o ambiente local
local _L = getfenv(1)
--cria os méta-métodos
function _L:__index(key)
print("Erro: Tentativa de acesso a um elemento inexistente: "..key)
end
function _L:__newindex(key, value)
print("Criacão de variável "..key.." com valor "..value)
end
--define o ambiente local como meta-tabela dele mesmo
setmetatable(_L, _L)
print("Imprimindo variável inexistente y: ", y)
local x = 10
end
|
Manoel Campos Silva Fh, Me IFTO - Instituto Federal do Tocantins
|

--
Lua BR -
http://groups.google.com/group/lua-br