comando for

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

comando for

Michel Braz de Morais
Senhores.
Estava eu criando meus scripts de teste e me deparei com uma situação:
Então fiz uma prova e constatei:
for i=0, 10, 1 do
    if i > 5 then
        i = 0
    end
    print("i["..i.."]")
end

Saída:
i[0]
i[1]
i[2]
i[3]
i[4]
i[5]
i[0]
i[0]
i[0]
i[0]
i[0]

Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.

Olhei na documentação e li algo sobre os controles da iteração utilizar variáveis invisíveis.
Gostaria de entender!!
Alguém?
 
 


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: comando for

Luis Retondaro
Oi,
Talvez você já saiba, mas vou tentar uma luz:
A visibilidade de uma variável está associada ao seu escopo.
Quando você faz i = 0 (atribui valor a i) dentro do escopo do bloco que tem uma variável de controle com mesmo nome, uma outra posição de memória é usada para atribuir este valor, pois internamente Lua trata estas variáveis de controle como invisíveis ao escopo do bloco.
Não recomendo que faça isso. Pode ser confuso demais em algum momento. Se desejar recomeçar o loop em determinado ponto faça isso de outra forma, talvez usando um while como controle de fluxo.

Abraço

Luis Retondaro

Em 23 de setembro de 2014 19:23, Michel Braz de Morais <[hidden email]> escreveu:
Senhores.
Estava eu criando meus scripts de teste e me deparei com uma situação:
Então fiz uma prova e constatei:
for i=0, 10, 1 do
    if i > 5 then
        i = 0
    end
    print("i["..i.."]")
end

Saída:
i[0]
i[1]
i[2]
i[3]
i[4]
i[5]
i[0]
i[0]
i[0]
i[0]
i[0]

Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.

Olhei na documentação e li algo sobre os controles da iteração utilizar variáveis invisíveis.
Gostaria de entender!!
Alguém?
 
 


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: comando for

Jhonathan Paulo Banczek
In reply to this post by Michel Braz de Morais
creio que isso não esteja errado é assim mesmo.
Cada vez que um loop é efetuado é checado a variavel e a condição em "for i=0, 10, 1 do"
isso faz com que a variavel i receba o proximo valor da iteração do laço.

faça isso e veja:

for i=0, 10, 1 do
   print("i: ", i)

    if i > 5 then
        i = 0
    end
    print("i["..i.."]")
end


Em 23 de setembro de 2014 18:23, Michel Braz de Morais <[hidden email]> escreveu:
Senhores.
Estava eu criando meus scripts de teste e me deparei com uma situação:
Então fiz uma prova e constatei:
for i=0, 10, 1 do
    if i > 5 then
        i = 0
    end
    print("i["..i.."]")
end

Saída:
i[0]
i[1]
i[2]
i[3]
i[4]
i[5]
i[0]
i[0]
i[0]
i[0]
i[0]

Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.

Olhei na documentação e li algo sobre os controles da iteração utilizar variáveis invisíveis.
Gostaria de entender!!
Alguém?
 
 


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.



--
________________________________________

Atenciosamente
Jhonathan Paulo Banczek

___________________________________

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: comando for

Michel Braz de Morais
In reply to this post by Luis Retondaro
Hum,
Ok obrigado pela resposta rápida e conclusiva.
Muito bem explicado
:)


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

Em 23 de setembro de 2014 19:42, Luis Retondaro <[hidden email]> escreveu:
Oi,
Talvez você já saiba, mas vou tentar uma luz:
A visibilidade de uma variável está associada ao seu escopo.
Quando você faz i = 0 (atribui valor a i) dentro do escopo do bloco que tem uma variável de controle com mesmo nome, uma outra posição de memória é usada para atribuir este valor, pois internamente Lua trata estas variáveis de controle como invisíveis ao escopo do bloco.
Não recomendo que faça isso. Pode ser confuso demais em algum momento. Se desejar recomeçar o loop em determinado ponto faça isso de outra forma, talvez usando um while como controle de fluxo.

Abraço

Luis Retondaro

Em 23 de setembro de 2014 19:23, Michel Braz de Morais <[hidden email]> escreveu:
Senhores.
Estava eu criando meus scripts de teste e me deparei com uma situação:
Então fiz uma prova e constatei:
for i=0, 10, 1 do
    if i > 5 then
        i = 0
    end
    print("i["..i.."]")
end

Saída:
i[0]
i[1]
i[2]
i[3]
i[4]
i[5]
i[0]
i[0]
i[0]
i[0]
i[0]

Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.

Olhei na documentação e li algo sobre os controles da iteração utilizar variáveis invisíveis.
Gostaria de entender!!
Alguém?
 
 


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: comando for

Sérgio Medeiros-2
In reply to this post by Michel Braz de Morais
2014-09-23 19:23 GMT-03:00 Michel Braz de Morais <[hidden email]>:
> Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.
>
> Olhei na documentação e li algo sobre os controles da iteração utilizar
> variáveis invisíveis.
> Gostaria de entender!!
> Alguém?

Michel,

acho que a questão principal aqui é que o corpo do laço "for" não
deve alterar a variável "i" que controla o laço. Isso está dito no
livro Programming in Lua:
"(...), you should never change the value of the control variable: The
effect of such changes is unpredictable."

A primeira edição do Programming in Lua está disponível online.
Esta é a parte que trata do "for" numérico:
http://www.lua.org/pil/4.3.4.html

Sérgio

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu 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].
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: comando for

Michel Braz de Morais
Obrigado pessoal!
Pelas respostas.
Creio que ja foi sanado a duvida


att,

Michel Braz de Morais

Analista / Desenvolvedor de sistemas

Em 24 de setembro de 2014 08:15, Sérgio Medeiros <[hidden email]> escreveu:
2014-09-23 19:23 GMT-03:00 Michel Braz de Morais <[hidden email]>:
> Observei que mesmo eu atribuindo algum valor a "i" a mesma não permanece.
>
> Olhei na documentação e li algo sobre os controles da iteração utilizar
> variáveis invisíveis.
> Gostaria de entender!!
> Alguém?

Michel,

acho que a questão principal aqui é que o corpo do laço "for" não
deve alterar a variável "i" que controla o laço. Isso está dito no
livro Programming in Lua:
"(...), you should never change the value of the control variable: The
effect of such changes is unpredictable."

A primeira edição do Programming in Lua está disponível online.
Esta é a parte que trata do "for" numérico:
http://www.lua.org/pil/4.3.4.html

Sérgio

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu 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].
Para obter mais opções, acesse https://groups.google.com/d/optout.

--
Lua BR - http://groups.google.com/group/lua-br
---
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].
Para mais opções, acesse https://groups.google.com/d/optout.