Obs. qualquer tentativa de obter o valor de uma variável global não declarada dará erro.
#### Modo const: #### Neste modo toda variável global ou campo de uma tabela será imutável, ou seja, depois de atribuir um valor não será possível mudar de valor.Obs. qualquer tentativa de obter o valor de uma variável global não declarada dará erro.
#### Modo local: #### Neste modo só é permitido o uso de variáveis locais, qualquer tentativa de atribuir uma global dará erro. Em caso de tabela, não será possível atribuir novos campos.
//funciona apenas com variáveis globais ou valores de tabela.
local estrito = inclua'estrito';
estrito.modo_global();
a = 1;
imprima(a);
//estrito.desative(); //podemos desativar o modo global e dará certo a atribuição de valor diferente.
a = 'A'; //--> erro no modo estrito global, tentativa de atribuir um valor string em uma variável número.
imprima(a);
local n = 1;
n = 'olá'; //-- ok, pois em variável local é permitido a troca de valores de tipos diferentes.
imprima(n);
local estrito = inclua'estrito';
estrito.modo_const();
PI = 3.14;
PI = 1; //--> Erro ao atribuir novo valor em uma variável global em modo const.
imprima(PI);
local n = 1;
n = 2; //--> ok, pois em modo local é permitido.
local estrito = inclua'estrito';
estrito.modo_local();
local a = 1;
local b = 2;
c = 3; //->erro em modo local, tentativa de atribuição de variável global;
#### Modo global, const e local em tabelas: ####
O modo local força o programador usar somente variáveis locais, veja:
local estrito = inclua'estrito';
local t = {};
estrito.modo_global(t);
t.s = 'algo';
//t.s = 3; //--> erro ao atribuir um valor número em um campo de tabela do tipo string.
estrito.desative(t);
t.s = 3; //após a desativação do modo é possível alterar o tipo dos valores dos campos.
local c = {};
estrito.modo_const(c);
c.s = 'c.s: algo';
//c.s = 'c.s: algum'; //--> erro ao trocar uma valor de campo de tabela em modo const.
estrito.desative(c);
c.s = 'c.s: outro'; //após a desativação do modo é possível alterar os campos.
local l = {a=1, b=2};
estrito.modo_local(l);
//l.s = 'ola'; //--> erro, pois não é permitido adicionar novos campos na tabela em modo local.
l.a = 10; //para os campos da tabela definidos antes do modo local é permitido a mudança de valores.
l.b = 20; //para os campos da tabela definidos antes do modo local é permitido a troca de valores.
estrito.desative(l);
l.s = 'ola'; //após a desativação do modo é possível acrescentar novos campos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
local estrito = inclua'estrito'; local t = {}; estrito.modo_global(t); t.s = 'algo'; //t.s = 3; //--> erro ao atribuir um valor número em um campo de tabela do tipo string. estrito.desative(t); t.s = 3; //após a desativação do modo é possível alterar o tipo dos valores dos campos. local c = {}; estrito.modo_const(c); c.s = 'c.s: algo'; //c.s = 'c.s: algum'; //--> erro ao trocar uma valor de campo de tabela em modo const. estrito.desative(c); c.s = 'c.s: outro'; //após a desativação do modo é possível alterar os campos. local l = {a=1, b=2}; estrito.modo_local(l); //l.s = 'ola'; //--> erro, pois não é permitido adicionar novos campos na tabela em modo local. l.a = 10; //para os campos da tabela definidos antes do modo local é permitido a mudança de valores. l.b = 20; //para os campos da tabela definidos antes do modo local é permitido a troca de valores. estrito.desative(l); l.s = 'ola'; //após a desativação do modo é possível acrescentar novos campos.
local estrito = inclua'estrito';
estrito.modo_global();
s = 'ola';
imprima(s);//--> ola
estrito.desative();
imprima(s);// -->nulo;
//os valores ficam na metatabela .__self para global e .__const para const.
local mt1 = obtmetatabela(_G);
se mt1 entao
imprima( mt1.__self.s); //--> ola;
fim
estrito.modo_const();
__S__ = 'minha var const';
imprima(__S__);//--> minha var const
estrito.desative();
imprimma(__S__); //--> nulo;
local mt2 = obtmetatabela(_G);
se mt2 entao
imprima(mt2.__const.__S__);//--> minha var const
fim
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
local estrito = inclua'estrito';
estrito.modo_global();
s = 'ola';
imprima(s);//--> ola
estrito.desative();
imprima(s);// -->nulo;
//os valores ficam na metatabela .__self para global e .__const para const.
local mt1 = obtmetatabela(_G);
se mt1 entao
imprima( mt1.__self.s); //--> ola;
fim
estrito.modo_const();
__S__ = 'minha var const';
imprima(__S__);//--> minha var const
estrito.desative();
imprimma(__S__); //--> nulo;
local mt2 = obtmetatabela(_G);
se mt2 entao
imprima(mt2.__const.__S__);//--> minha var const
fim
Função que define o modo estrito global, isto significa que não será possível mudar o tipo de uma variável
Função que define o modo estrito const, não é possível alterar o valor já atribuído.
Também não é possível usar uma variável antes dela estar declarada.Função estrito.modo_local(t) - ativa o modo estrito local, variáveis globais não serão permitidas.
Esta função força o programador a usar somente variáveis locais, caso tente atribuir uma variável global ocorrerá um erro e o programa será finalizado com a mensagem de erro.Função estrito.desative(t) - desativa o modo estrito local, global ou const