Необходимо ли варрировать переменные петли PROP в CFScript?

StackOverflow https://stackoverflow.com/questions/4611617

  •  26-09-2019
  •  | 
  •  

Вопрос

При использовании CFML и CF9 я обычно варрируйте свои переменные петли; в этом случае local.i, Например:

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

Недавно я начал преобразовывать некоторые вещи в CFScript, и (к моему разочарованию я обнаружил, что нет никакого пути в список в CFScript), мне интересно, если я все еще должен вариант прицел свои переменные петли, а также как:

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

Я должен делать local.i = 1 а также local.i = local.i + 1 sttead из примерного кода в моем примере? Это необходимо?

РЕДАКТИРОВАТЬ: Я также должен спросить, правильная ли форма CFScript моего CFML-петли; Я спрашиваю, потому что я только что заметил, что мой цикл CFML использует , (запятая и пространство) для delimiter Аргумент, который кажется несуществованием в CFScript версии петли.

Это было полезно?

Решение

Все функции по умолчанию все еще используют переменные. Где бы вы ни были ранее использовали var Теперь вы должны использовать local.

Что касается Somma + Space Delimiter, две вещи:

  1. Если вы не знаете, разделители аргумента функции списка не предназначены для нескольких символов, это для нескольких разделителей; Таким образом, ваш список будет разделен для каждого возникновения запятой, а также каждое возникновение пространства.

  2. Вы используете тот же аргумент, что и часть вашего listLen а также listGetAt Методы, как так:

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

Другие советы

Вам определенно нужно использовать локальную область, так как Adam говорит, но в случае петлей я думаю, что есть сильный случай для использования ключевого слова «var», а не «локальный» префикс для удовольствия для читаемости. С CF9 вы больше не вынуждены размещать декларации VAR в верхней части функции, поэтому все, что вам нужно сделать, - это добавить «var» в свой оператор условия для всех переменных «i», чтобы стать потоком безопасным.

Принимаясь в хорошую точку Бена о сохранении длины списка перед запуском цикла, и использование более лаконичного стиля i ++ приращений ваш код будет:

var listLength  =   ListLen( this.list );
for (var i = 1; LTE listLength; i++ ) {
    if (Len(ListGetAt(this.list, i) GT 10)) {
    // do something
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top