Intervalos de for numérico
A primeira forma de for da rc.3 percorre um intervalo inclusivo de inteiros:
for index = 1, 5 do print(index)endIsso imprime de 1 a 5. O limite final é incluído quando a progressão o alcança.
Escolhendo um passo
Seção intitulada “Escolhendo um passo”Omita a terceira expressão para usar um passo de 1 ou forneça um explicitamente:
for even = 2, 10, 2 do print(even)end
for countdown = 5, 1, -1 do print(countdown)endUm passo positivo continua enquanto o vínculo for <= ao limite final. Um passo negativo continua enquanto ele for >= ao limite final. Um intervalo pode estar vazio quando sua direção não permite alcançar o limite.
Regras estáticas
Seção intitulada “Regras estáticas”O limite inicial, o limite final e o passo opcional:
- são avaliados exatamente uma vez, da esquerda para a direita, antes do laço;
- devem ter o mesmo tipo inteiro fixo;
- não podem usar um tipo de ponto flutuante;
- usam aritmética de progressão verificada.
O vínculo do laço é imutável e existe somente dentro do corpo:
for index: Int8 = 1, 3 do -- a anotação de tipo não faz parte da gramática do intervalo index = 2 -- também é inválido: o vínculo não pode receber atribuiçãoendEm vez disso, escreva os limites com o contexto desejado:
local first: Int8 = 1local last: Int8 = 3
for index = first, last do print(String(index))endUm passo igual a zero conhecido estaticamente é rejeitado. Um passo igual a zero em tempo de execução causa um trap InvalidRangeStep antes da primeira iteração.
Arrays atualmente
Seção intitulada “Arrays atualmente”Arrays usam base um, portanto um intervalo de índices cobre suas posições de maneira direta:
for index = 1, Array.length(names) do print(Array.get(names, index))endA rc.3 não implementa for name in names. A iteração generalizada continua adiada até que os protocolos nominais Iterable<T> e Iterator<T> estejam completos; não há alternativa dinâmica de iterador.
