Local em Uma variável global!!!??

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Local em Uma variável global!!!??

augustoreal.santos
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Local em Uma variável global!!!??

Tomás Guisasola
Oi Augusto

Isso está explicado no manual: a palavra reservada 'local' indica a criação de uma nova variável local. Se for apenas uma atribuição, então é uma atribuição (óbvio :-).  Ou seja, vai depender do código anterior: se já existir uma local com esse nome, a atribuição será a ela; se não houver, será atribuída à variável "global" de mesmo nome. Não existe criar uma global.

Abraço,
Tomás

Em qua, 27 de fev de 2019 21:25, <[hidden email]> escreveu:
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Local em Uma variável global!!!??

augustoreal.santos
Ainda não entendi

Eu só queria sabe oq qual a diferença de uma variável 

Sem estar em um bloco de código

local x = 10

x = 10

Qual a diferença de botar local sendo que não tem bloco nenhum????

Em qua, 27 de fev de 2019 22:09, Tomás Guisasola <[hidden email]> escreveu:
Oi Augusto

Isso está explicado no manual: a palavra reservada 'local' indica a criação de uma nova variável local. Se for apenas uma atribuição, então é uma atribuição (óbvio :-).  Ou seja, vai depender do código anterior: se já existir uma local com esse nome, a atribuição será a ela; se não houver, será atribuída à variável "global" de mesmo nome. Não existe criar uma global.

Abraço,
Tomás

Em qua, 27 de fev de 2019 21:25, <[hidden email]> escreveu:
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Local em Uma variável global!!!??

Breno Ramalho Lemes-2
Em Lua, todas as variáveis estão dentro de uma tabela. A tabela de variáveis globais é _G. Todo código Lua está dentro de uma função. Inclusive o código principal, que é uma função "invisível". Se você declara sem a palavra reservada "local", a variável vai para _G. Se você usa "local", apesar de que vai parecer global, a variável não vai para _G mas para o escopo dessa função "invisível".

A palavra reservada "local" vai fazer diferença mais notável quando dentro de um escopo (função, bloco if, for, etc.). 

x = 5 - - global, em _G
local y = 2 - - não em _G, escopo da função "invisível"
if y > 0 then
local z = 3 - - somente dentro do bloco if
end
print(z) - - nil


Em Qua, 27 de fev de 2019 22:48, José Augusto <[hidden email]> escreveu:
Ainda não entendi

Eu só queria sabe oq qual a diferença de uma variável 

Sem estar em um bloco de código

local x = 10

x = 10

Qual a diferença de botar local sendo que não tem bloco nenhum????

Em qua, 27 de fev de 2019 22:09, Tomás Guisasola <[hidden email]> escreveu:
Oi Augusto

Isso está explicado no manual: a palavra reservada 'local' indica a criação de uma nova variável local. Se for apenas uma atribuição, então é uma atribuição (óbvio :-).  Ou seja, vai depender do código anterior: se já existir uma local com esse nome, a atribuição será a ela; se não houver, será atribuída à variável "global" de mesmo nome. Não existe criar uma global.

Abraço,
Tomás

Em qua, 27 de fev de 2019 21:25, <[hidden email]> escreveu:
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Local em Uma variável global!!!??

augustoreal.santos
Muito obrigado finalmente entendi

Em qui, 28 de fev de 2019 01:15, Breno Ramalho Lemes <[hidden email]> escreveu:
Em Lua, todas as variáveis estão dentro de uma tabela. A tabela de variáveis globais é _G. Todo código Lua está dentro de uma função. Inclusive o código principal, que é uma função "invisível". Se você declara sem a palavra reservada "local", a variável vai para _G. Se você usa "local", apesar de que vai parecer global, a variável não vai para _G mas para o escopo dessa função "invisível".

A palavra reservada "local" vai fazer diferença mais notável quando dentro de um escopo (função, bloco if, for, etc.). 

x = 5 - - global, em _G
local y = 2 - - não em _G, escopo da função "invisível"
if y > 0 then
local z = 3 - - somente dentro do bloco if
end
print(z) - - nil


Em Qua, 27 de fev de 2019 22:48, José Augusto <[hidden email]> escreveu:
Ainda não entendi

Eu só queria sabe oq qual a diferença de uma variável 

Sem estar em um bloco de código

local x = 10

x = 10

Qual a diferença de botar local sendo que não tem bloco nenhum????

Em qua, 27 de fev de 2019 22:09, Tomás Guisasola <[hidden email]> escreveu:
Oi Augusto

Isso está explicado no manual: a palavra reservada 'local' indica a criação de uma nova variável local. Se for apenas uma atribuição, então é uma atribuição (óbvio :-).  Ou seja, vai depender do código anterior: se já existir uma local com esse nome, a atribuição será a ela; se não houver, será atribuída à variável "global" de mesmo nome. Não existe criar uma global.

Abraço,
Tomás

Em qua, 27 de fev de 2019 21:25, <[hidden email]> escreveu:
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Local em Uma variável global!!!??

Eric Chiesse
In reply to this post by Breno Ramalho Lemes-2
Sendo um pouco mais preciso:

Como dito, o seu script lua pode ser encarado como uma função (mais especificamente um chunk compilado que pode ser chamado como função)
Se vc declara uma variável local top level (fora de qualquer função) em um script, então dentro desse script ela vai parecer global porque as regras de visibilidade vão permitir que as funções definidas *no mesmo script* vejam essa variável.
A coisa fica diferente quando vc tem mais de um script. Nesse caso você vai perceber que quando vc declara uma variável local em um arquivo ela não pode ser acessada em outro arquivo (ela é local ao chunk definido pelo arquivo onde foi declarada). Diferente de uma variável global de fato, que não tem a restrição de um chunk específico (lembra que ela mora na tabela _G). Isso é usado por exemplo para criar bibliotecas em lua que não poluam teu ambiente global
Ex:
mylib.lua:
----------------------------------------------------------
local mylib = {} -- mylib não é visível fora deste arquivo

function mylib.foo()
    print("foo")
end

function mylib.bar()
    print("bar")
end

-- As funções foram definidas dentro de mylib. Logo são inacessíveis fora deste arquivo.

-- Para dar acesso às funcionalidades vamos retornar a tabela:
return mylib

Se eu quiser usar mylib eu preciso chamar assim, por exemplo:
main.lua:
----------------------------------------------------------
local mylib = require"mylib"
mylib.foo()

Se eu der um require em "mylib.lua" sem atribuir o retorno a uma variável, as funções internas ficam inacessíveis pois estão dentro uma tabela local ao chunk compilado.
Se "mylib.lua" no caso acima for chamada com dofile e sem atribuir o valor de retorno a uma variável, então a tabela será coletada e nem vai existir para qualquer fim prático.

Resumindo:
- declaração local top level é diferente de global
- vc pode usar local top level para dar visibilidade de arquivo a uma variável (ela fica invisível fora daquele arquivo)
- variáveis globais são globais inclusive entre arquivos.
- é importante entender o conceito de chunk, as regras de escopo léxico de lua e as regras de visibilidade de variáveis.
---
Eric


Em qui, 28 de fev de 2019 às 01:15, Breno Ramalho Lemes <[hidden email]> escreveu:
Em Lua, todas as variáveis estão dentro de uma tabela. A tabela de variáveis globais é _G. Todo código Lua está dentro de uma função. Inclusive o código principal, que é uma função "invisível". Se você declara sem a palavra reservada "local", a variável vai para _G. Se você usa "local", apesar de que vai parecer global, a variável não vai para _G mas para o escopo dessa função "invisível".

A palavra reservada "local" vai fazer diferença mais notável quando dentro de um escopo (função, bloco if, for, etc.). 

x = 5 - - global, em _G
local y = 2 - - não em _G, escopo da função "invisível"
if y > 0 then
local z = 3 - - somente dentro do bloco if
end
print(z) - - nil


Em Qua, 27 de fev de 2019 22:48, José Augusto <[hidden email]> escreveu:
Ainda não entendi

Eu só queria sabe oq qual a diferença de uma variável 

Sem estar em um bloco de código

local x = 10

x = 10

Qual a diferença de botar local sendo que não tem bloco nenhum????

Em qua, 27 de fev de 2019 22:09, Tomás Guisasola <[hidden email]> escreveu:
Oi Augusto

Isso está explicado no manual: a palavra reservada 'local' indica a criação de uma nova variável local. Se for apenas uma atribuição, então é uma atribuição (óbvio :-).  Ou seja, vai depender do código anterior: se já existir uma local com esse nome, a atribuição será a ela; se não houver, será atribuída à variável "global" de mesmo nome. Não existe criar uma global.

Abraço,
Tomás

Em qua, 27 de fev de 2019 21:25, <[hidden email]> escreveu:
Ei gente uma duvida o que acontece se eu crio uma variável global e boto local nela tipo:

local x = 100 -- qual seria a difereça se eu não usasse o local aqui pq pra mim não tem nenhuma diferença.







--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.