Pergunta

Quando utilizar CFML e CF9 eu geralmente var âmbito meu variáveis de loop;neste caso, local.i, por exemplo:

<cfloop list="#this.list#" index="local.i">
  <cfif Len(local.i) GT 10>
    // do something
  </cfif>
</cfloop>

Eu recentemente comecei a conversão de algumas coisas em CFScript, e (para minha decepção, eu descobri que não há nenhuma maneira para fazer um loop através de uma lista no CFScript) eu estou me perguntando se eu ainda deve var âmbito meu variáveis de loop, e como:

for (i = 1; LTE ListLen(this.list); i = i + 1 ) {
  if (Len(ListGetAt(this.list, i) GT 10)) {
    // do something
  }
}

Eu deveria estar fazendo local.i = 1 e local.i = local.i + 1 istead do código de exemplo no meu exemplo?É necessário?

EDITAR:Gostaria também de perguntar se o CFScript formulário de meu CFML loop é correto;Eu pergunto porque eu notei que o meu CFML circuito usa um , (ponto e vírgula e espaço) para o delimiter argumento, que parece não existência no CFScript versão do loop.

Foi útil?

Solução

Todas as funções ainda utilizar o espaço das variáveis por padrão se você não especificar um, o que tornaria a omissão não é thread-safe.Onde quer que você deve ter usado var agora você deve usar local.

Como a vírgula+espaço delimitador, duas coisas:

  1. No caso de você não estão cientes de que, o delimitadores de argumento de função de lista não é para vários caracteres delimitadores, é para vários delimitadores;portanto, sua lista será dividido para cada ocorrência de uma vírgula, assim como cada ocorrência de um espaço.

  2. Você usa o mesmo argumento, como parte de seu listLen e listGetAt métodos, como:

    for (i = 1; LTE ListLen(this.list, ', '); i = i + 1 ) {
      if (Len(ListGetAt(this.list, i, ', ') GT 10)) {
        // do something
      }
    }
    

Outras dicas

Você definitivamente precisa usar o âmbito local como Adam diz, mas no caso de loops eu acho que há um forte argumento para usar o "var" palavra-chave em vez de "local" prefixo por uma questão de legibilidade.Com CF9 você não está mais se forçado a colocar a var declarações no topo da função, então tudo que você precisa fazer é adicionar o "var" para o seu "para a" declaração de condição para todos os que o índice "i" variáveis para se tornar thread-safe.

Tendo em Ben bom ponto de verão sobre o comprimento da lista antes de iniciar o loop, e utilizando a mais concisa i++ incremento de seu estilo de código seria:

var listLength  =   ListLen( this.list );
for (var i = 1; LTE listLength; i++ ) {
    if (Len(ListGetAt(this.list, i) GT 10)) {
    // do something
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top