Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   switch не пашет (http://www.flasher.ru/forum/showthread.php?t=195016)

fduch 26.02.2013 21:51

switch не пашет
 
Бред какойто твориться, проверяю одну и туже пеерменную в свичи и через ИФ, в свиче не проходит, в ИФ проходит.
Как такое может быть?

Код AS3:

for (var i:int = w; i < w+size; i++)
                        {
                                for (var a:int = q; a < q+size; a++)
                                {
                                        //trace(map_unit_castl_arr[i][a]);
                                switch(map_unit_castl_arr[i][a])
                                        {
                                                case 0:
                                                        break;
                                                case 1:
                                                        break;
 
                                                case 2:
                                                        trace("444");
                                                        break;
                                                case 3:
                                                        break;
 
                                        }
                                        if(map_unit_castl_arr[i][a] == 2){trace("eee")}
 
 
                                }
 
                        }

trace("444"); и trace("eee"); должны отрабатывать обе или не одна! Отрабатывает только еее

gloomyBrain 26.02.2013 21:55

А что будет, если сначала пробовать трейсить eee, а потом делать switch?

caseyryan 26.02.2013 21:57

Что-то подсказывает мне, что в свиче директива break останавливает внутренний цикл.

gloomyBrain 26.02.2013 22:04

Цитата:

Что-то подсказывает мне, что в свиче директива break останавливает внутренний цикл.
Как бы то ни было, тут есть еще одна проблема - в switch идет строгое сравнение, а == - это нестрогое. Показательный пример:

Код AS3:

package
{
    import flash.display.Sprite;
 
    public class Test extends Sprite
    {
 
        public function Test()
        {
            super();
 
            var a:Object = "1";
            var b:Object = 1;
 
            trace("a == b", (a == b));
            trace("a === b", (a === b));
 
            switch (a)
            {
                // в первую очередь сравниваем с числом и тут проверка не дает результата
                case 1:
                    trace("a is int");
                break;
 
                // а теперь сравниваем со строкой и проверка проходит
                case "1":
                    trace("a is string");
                break;
 
                default:
                    trace("a is something from another universe");
            }
 
        }
    }
}

Ну и, кстати, не выкидывает из цикла по break:
Код AS3:

package
{
    import flash.display.Sprite;
 
    public class Test extends Sprite
    {
 
        public function Test()
        {
            super();
 
            for(var i:int = 0; i < 2; i++)
            {
                switch (i)
                {
                    case 0:
                        trace("i == ", i);
                    break;
 
                    case 1:
                        trace("i == ", i);
                    break;
                }
            }
        }
    }
}


fduch 26.02.2013 22:05

Цитата:

Сообщение от gloomyBrain (Сообщение 1122562)
А что будет, если сначала пробовать трейсить eee, а потом делать switch?

без разницы, отрабатывает и до и после свича.

Добавлено через 2 минуты
ДА! Ковычки решили проблему))) спс.

зы: А ИФу тоесть пофигу как сравнивать???

gloomyBrain 26.02.2013 22:12

А switch это и есть ни что иное, как последовательность строгих if'ов. То есть
Код AS3:

switch(1)
{
case 1:
break;
 
case 2:
break;
 
}

Это абсолютно одно и то же, что и
Код AS3:

if (1 === 1)
{
}
else if (1 === 2)
{
}


if'у не "по фигу", он принимает в себя тот тип сравнения, который вы указываете. Указываете строгий === - получаете что число и строка это разные вещи, указываете нестрогий == - получаете что число и строка это одно и то же

fduch 27.02.2013 00:47

Понятно тоесть в ифе "==" и "===" а в свиче наличие и отсутствие кавычек. Запомню)

mikhailk 27.02.2013 01:00

На самом деле, при использовании элемента массива в операторе switch необходимо явно привести его к нужному типу (вместо swicth(arr[i]) - писать swicth(int(arr[i])) или какой там тип должен быть).


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

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