Я заметил кое-что интересное при использовании конструкций for-in
в cfscript : похоже, что аргумент variable in struct
в цикле for(in)
установлен как независимая переменная и не имеет ссылки на своего родителяключ массива.
Если вы запустите следующий код, вы увидите, что массив не изменяется на выходе.Переменной local.i
внутри цикла присваивается новое значение, но массив остается неизменным.
function arrayTest()
{
local.foo = ["bar-one","bar-two", "bar-three"];
for (local.i in local.foo)
{
local.i = "I am #local.i#";
// Dump local.i; its output will be 'I am bar-[one[two]] etc...'
}
// Dump local.i; its output will as above
// Dump the array; its keys remain unchanged: "bar-one, bar-two, -bar-three"
writeDump(local.foo);
}
Так почему же это так?Я знаю, что массивы передаются по ссылке в CF, но я не передаю массив здесь.Я просто использую один в конструкции for-in
.Есть разница, нет?
Немного вводить в заблуждение аргумент variable in structure.
Я вижу local.i
как ярлык для local.foo[ local.i ]
.Похоже, что var действительно является ключом массива, и мы можем его изменить.Решение здесь состоит в том, чтобы вместо этого использовать простой цикл for()
.