Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вложенный for и uint (http://www.flasher.ru/forum/showthread.php?t=146953)

Universe 22.11.2010 22:04

Вложенный for и uint
 
Привет!
Столкнулся с весьма простой проблемой, но почему то не могу понять почему она происходит. Есть 2 вложенных друг в друга for, в которых я делаю trace.

Код AS3:

var a:uint;
 
 
function traceMe():void
{
        for(var i:uint; i<4;i++)
        {
                for(var j:uint;j<4;j++)
                {
                        trace(j);
                }
        }
}
 
traceMe();

Вроде бы, по логике вещей трейс должен срабатывать здесь16 раз, НО, он срабатывает всего 4 раза, т.е. внешний цикл выполняется всего 1 раз. Тоже самое если сделать тройное вложение for. НО, если я буду в теле цикла переменной явно присваивать 0, т.е. var j:uint = 0 - всё работает как надо. В чём здесь подвох? Ведь uint по умолчанию всегда равен 0?

Zebestov 22.11.2010 22:14

я могу ошибаться, но может все-таки flash не делает j=0 после первого прохода.
повторной инициализации j не происходит.

Universe 22.11.2010 22:18

т.е. внутри цикла переменная инициализируется только один раз? А при последующих обращениях к ней var в записи игнорируется?

Zebestov 22.11.2010 22:28

Иначе ты бы получал ошибку о повторном объявлении переменной. Вложенный цикл — это, видать, исключительный случай, который особо интерпретируется... и мне это не нравится — "неаккуратненько как-то"

Psycho Tiger 22.11.2010 22:41

Действительно, в чем )

Zebestov кстати по понятиям всё раскидал, респект ему.

По поводу ВСЕХ переменных ВЕЗДЕ - они переносятся в самое начало блока. Все локальные переменные объявлены в самом-самом верху метода при компиляции, все поля класса - в самом верху у класса. Поэтому j = 0, потом j = 4 и каждый раз оно 4 на следующих итерациях. Задавая явно - j присваивается к 0 на каждой итерации. Пишите явно подобные присваивания - это хороший тон и убережет Ваш от ошибок.

Universe 22.11.2010 23:11

Понятно! Спасибо!:)


Часовой пояс GMT +4, время: 07:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.