Необходимо ли варрировать переменные петли PROP в CFScript?
-
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, две вещи:
Если вы не знаете, разделители аргумента функции списка не предназначены для нескольких символов, это для нескольких разделителей; Таким образом, ваш список будет разделен для каждого возникновения запятой, а также каждое возникновение пространства.
Вы используете тот же аргумент, что и часть вашего
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
}
}