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