Jump to content

Recommended Posts

Olá pessoal, gostaria de tirar algumas dúvidas relacionadas a tabelas, não só a tabelas, mas como definições exemplos:

Ex 01:

Isso é:

local infoMsgs = {

A mesma coisa que isto:

infoMsgs = {

Fiz alguns testes, e a funciona ambos, gostaria de saber a diferença ( se tem ) entre local e somente a palavra definida na tabela outro exemplo de definição:

Isto é:

message = message:gsub("#%x%x%x%x%x%x","")

A mesma coisa que isto:

local message = message:gsub("#%x%x%x%x%x%x","")

Ambos funcionam também, alguém pode me explicar ?

Link to comment
  • Other Languages Moderators
addCommandHandler ("teste1", function ()
    local numero1 = 1
    if numero2 > 1 then -- Erro: Impossivel calcular nulo com 1.
        outputChatBox ("Olá")
    end
end)

addCommandHandler ("teste2", function ()
    local numero2 = 2
    if numero1 > 0 then -- Erro: Impossivel calcular nulo com 2.
        outputChatBox ("mundo.")
    end
end)

Local é usado para variáveis que devem ser usadas somente dentro do escopo em que foram criadas.

Faça o seguinte teste: Crie 2 funções com um addCommandHandler diferente em cada uma delas. Dentro de cada função crie uma variável local com um valor diferente em cada uma. Tente usar a variável de uma função na outra função e perceba que ele vai dar erro como se a variável nem existisse.

Também é possível fazer funções locais.

Edited by Lord Henry
  • Thanks 1
Link to comment

A pergunta que voce tem que se fazer é ..  eu preciso disso em mais algum lugar?
se sim : não se usa local
se não : usa local

exemplo : voce tem um arquivo chamado "config.lua" e tem nele este codigo:

config = {
    priceweapons = 5000,
    priceColete = 2000
}


como voce vai usar isso em outros arquivos, entao esta tabela nao pode ser local, quando voce torna uma variavel local ela só é acessivel dentro daquele arquivo.

cuidado tambem ao usar local dentro de funçoes exemplo:

local info = {50,200,10}
function execute()
    local info = {}
end


neste caso a funcao execute esta criando uma nova tabela dentro de seu escopo.

 

local info = {50,200,10}
function execute()
    info = {}
end


neste caso a funcao execute esta resetando a tabela info.

Espero ter ajudado vlw '-'

  • Thanks 1
Link to comment
  • Other Languages Moderators

Fiz esse exemplo pra ficar mais fácil.

A variavelAzul também funciona dentro da área verde e da vermelha, mas a variavelVerde não funciona na área azul mas funciona na vermelha. E a variavelVermelha só funciona dentro do próprio escopo onde ela foi criada.

A variável azul funciona em todo esse arquivo.lua, mas somente dentro dele.

ySUD0ipLSuOpGylAX_pi0A.png

Se não fossem variáveis locais, elas funcionariam em qualquer lugar do seu script, inclusive fora deste arquivo.lua. Mas não funcionariam em scripts de lado oposto ao script de origem. (Se este arquivo.lua for client-side, elas não funcionam em arquivos server-side e nem vice-versa.)

De forma resumida: As variáveis locais funcionam somente em seu escopo e nos escopos que estão dentro dele. Mas nunca funcionam fora de seu escopo. No caso da variavelAzul, que não está dentro de um escopo, ele funciona no script inteiro.

--------------------------------------------------------------------

Esse é um dos principais motivos do porquê é importante indentar seu código (colocar os espaços no início das linhas), pois demarcam quais linhas pertencem a qual escopo, deixando o código muito mais fácil de interpretar e ler.

Edited by Lord Henry
  • Thanks 1
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...