reset para o contador de loops

2

Pergunta simples: se eu tiver um for loop (zsh) sobre uma lista não confiável, o que significa que a lista contém entradas que não podem ser previstas de antemão, posso redefinir o contador de loop for ? Isso demonstra o que estou pedindo:

# e.g. list=(1 5 2 9)
for i in $list ; do
    [[ $i = 2 ]] && i=${list[1]}
done

(Este exemplo irá obviamente dar um loop para sempre se funcionar).

Eu só consigo pensar em fazer assim:

for ((j=1; j<=${#list}; j++)); do
    [[ ${list[$j]} = 2 ]] && j=1
done

Existe uma maneira mais simples de fazer isso? ("Simplificado" significa mais fácil seguir com o olho o que você está fazendo.)

    
por Zorawar 23.07.2014 / 17:18

1 resposta

1

Você pode fazer algo como:

alias   forever='while ((1))' \
      try-again='continue 2'  \
        ok-done='break'

forever {
  for i ("$list[@]") {
    (( i == 2 )) && try-again
  }
  ok-done
}

Observe que você precisa de "$list[@]" em vez de $list se não quiser omitir os elementos vazios.

Não muito mais legível do que:

for ((i = 1; i <= $#list; i++)) {
  (( list[i] == 2 )) && i=1
}

embora.

    
por 23.07.2014 / 17:51

Tags