Вход

Просмотр полной версии : определённо глюк (не исключено, что мой)...


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 ); // и т.д. - кол-во аргументов не ограничено