Просмотр полной версии : определённо глюк (не исключено, что мой)...
Почему при таком коде число в имени всегда на единицу больше глубины?!!
_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)
Так первая тоже должна увеличиться! Я же префиксно инкрементирую!
начинающий
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, то есть то, что и нужно.
Тут тоже делается всё через зад :)
2начинающий
Честно, начиная читать это сообщение почему-то хотелось сразу отписать гневный ответ - я ж написал, что у меня постфиксное инкрементирование...
Потом дошёл до строчки
то алгоритм выполнения таков: второй параметр передаётся сразу, без вычеслений, то есть depth, а когда же приходится передавать первый аргумент, то приходится к depth прибавить 1, потом склеить со строкой, а потом уж передать в функцию.
Спасибо :)
А почему так криво (сначал второй)?
Тут тоже делается всё через зад
а где ещё?
начинающий
06.08.2003, 02:11
Люблю прелюдии! :)
Передача с заду на перед – типичный случай. Так проще логика работы программ, потому что данные из стека (место, куда передаются значения переменных в функции) при обратном запихивании достаются в природном порядке, ввиду организации стека по принципу первый вошел – последний вышел (подобно лотку тарелок). Видимо такой и порядок подготовки значений для погружения их в стек.
А что значит: «а где еще? »
2начинающий
при обратном запихивании достаются в природном порядке
LIFO?
А что значит: «а где еще? »
Ты писал: "Тут тоже делается всё через зад".
Вот я и спросил, где ещё.
Опа! Этого даже я не знал...
скромно, 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 ); // и т.д. - кол-во аргументов не ограничено
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.