Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   определённо глюк (не исключено, что мой)... (http://www.flasher.ru/forum/showthread.php?t=47689)

metton 05.08.2003 23:00

определённо глюк (не исключено, что мой)...
 
Почему при таком коде число в имени всегда на единицу больше глубины?!!
Код:

_root.crossword.duplicateMovieClip ("crossword"+(++depth), depth);
trace ("d n: "+_root["crossword"+depth].getDepth ()+" "+_root["crossword"+depth]._name)


Igor Ageyev 06.08.2003 01:07

Дык ты же сам его на единицу увеличиваешь
 
(++depth)

metton 06.08.2003 01:13

Так первая тоже должна увеличиться! Я же префиксно инкрементирую!

начинающий 06.08.2003 01:25

Есть два вида оператора инкремента: префисный - ++а и постфиксный – а++.
Разница между ними такова: если имеем код
a = 5;
b = a++;
то «при выходе» значения a и b станут соответственно 6 и 5 (во второй строке сначала исполняется присваивание, а потом к переменной а прибавляется еденица). Если же написать:
a = 5;
b = ++a;
то обе переменные станут равны 6 (во второй строке сначала производится увеличение а, после чего это новое значение заносится в переменную b).
Если же имеется код:
_root.crossword.duplicateMovieClip ("crossword"+(++depth), depth);
то алгоритм выполнения таков: второй параметр передаётся сразу, без вычеслений, то есть depth, а когда же приходится передавать первый аргумент, то приходится к depth прибавить 1, потом склеить со строкой, а потом уж передать в функцию.
Если же написать так:
_root.crossword.duplicateMovieClip ("crossword"+depth++, depth);
То при передаче первого аргумента сначала произойдет склейка строк, а потом depth=depth+1, то есть то, что и нужно.
Тут тоже делается всё через зад :)

metton 06.08.2003 01:38

2начинающий
Честно, начиная читать это сообщение почему-то хотелось сразу отписать гневный ответ - я ж написал, что у меня постфиксное инкрементирование...
Потом дошёл до строчки
Цитата:

то алгоритм выполнения таков: второй параметр передаётся сразу, без вычеслений, то есть depth, а когда же приходится передавать первый аргумент, то приходится к depth прибавить 1, потом склеить со строкой, а потом уж передать в функцию.
Спасибо :)


А почему так криво (сначал второй)?



Цитата:

Тут тоже делается всё через зад
а где ещё?

начинающий 06.08.2003 02:11

Люблю прелюдии! :)
Передача с заду на перед – типичный случай. Так проще логика работы программ, потому что данные из стека (место, куда передаются значения переменных в функции) при обратном запихивании достаются в природном порядке, ввиду организации стека по принципу первый вошел – последний вышел (подобно лотку тарелок). Видимо такой и порядок подготовки значений для погружения их в стек.

А что значит: «а где еще? »

metton 06.08.2003 02:28

2начинающий
Цитата:

при обратном запихивании достаются в природном порядке
LIFO?

Цитата:

А что значит: «а где еще? »
Ты писал: "Тут тоже делается всё через зад".
Вот я и спросил, где ещё.

Useless 06.08.2003 03:04

Опа! Этого даже я не знал...
скромно, eh? :p

начинающий, спасибо за инфу.

начинающий 06.08.2003 14:48

--2 Useless: --
Нельзя обнять необъятное и впихнуть невпихуемое (Р.Трахтенберг)

--2 all: --
Как пела група Наутилус: "Знайте и запоминайте...".
Можете попробовать такой пример:

Код:

function f()
{
        for(var i=0; i<arguments.length; i++)
                trace("аргумент функции #" + i + ": " + arguments[i]);
}

var foo = 0;
f( ++foo, ++foo, ++foo, ++foo, ++foo, ++foo ); // и т.д. - кол-во аргументов не ограничено



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

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