Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   Параметр по ссылке (http://www.flasher.ru/forum/showthread.php?t=64828)

Diomas 14.11.2004 04:34

Параметр по ссылке
 
Как можно (и можно ли) передать функции параметр по ссылке, т.е. что бы она могла его менять?
Код:

a = 10;
change(a);

\\ хотелось бы, чтобы в этом месте a было равно 0

function change(param) {
        param = 0;
}


Antares 14.11.2004 05:34

При передаче простых типов данных они, если не ошибаюсь, всегда передаются по значению, то есть либо пользуемся извратом типа

Код:

a = 10;
str = "a";
trace(a); //10
ch(this, str);
trace(a); // 0

function ch(path, param){
        path[param] = 0;
}

либо никак. Зато массивы всегда передаются по ссылке:

Код:

a = [10, 9, 8];
trace(a); // 10, 9, 8
ch(a);
trace(a); // 10, 0, 8

function ch(param){
        param[1] = 0;
}


Diomas 14.11.2004 06:11

Не хотелось бы "пользоваться извратом"... =)
Т.е. можно передавать параметры по ссылке как элементы массива, чтобы не передавать ссылки на объект и имя свойства, насколько я понял?

Antares 14.11.2004 07:01

Да, можно передавать как массив, но тогда изменения произойдут в массиве.

Поэтому не проще ли использовать что-то похожее на
Код:

var a = 10;
function Nullizer() {
        return 0;
}

a = Nullizer();
trace(a); // 0

?

Diomas 14.11.2004 07:38

Да, но я не идиот :). Мне это нужно для распределенных во времени вычислений. Т.е. чтобы можно было написать:
doSomethWithThat(objectToModify);
(где, функция будет выполнять объемные вычисления за неопределенный промежуток времени)
а потом использовать полученный результат, типа trace(objectToModify);
А то, что предложил ты, можно заменить на a=0; :) для простоты... Я в принципе понимаю, что ты не издеваешься, просто я сразу не раскрыл суть задачи. Прошу пардона.

Antares 14.11.2004 11:40

Я понимаю, что тебе это нужно не для банального обнуления, имелось ввиду, что использовать массив как промежуточный этап -- скорее всего, способ не лучший.

Надеюсь, я хотя бы в чем-то помог :)

silin 14.11.2004 21:47

Цитата:

Оригинал написал(а) Diomas
Да, но я не идиот :). Мне это нужно для распределенных во времени вычислений. Т.е. чтобы можно было написать:
doSomethWithThat(objectToModify);
(где, функция будет выполнять объемные вычисления за неопределенный промежуток времени)
а потом использовать полученный результат, типа trace(objectToModify);
А то, что предложил ты, можно заменить на a=0; :) для простоты... Я в принципе понимаю, что ты не издеваешься, просто я сразу не раскрыл суть задачи. Прошу пардона.

суть задачи так осталась непонятной:
если параметр - объект, то передается ссылка (меняй скока надо)
для простых типов - значение(т.е. чтоб модифицировать придется упаковать в объект и передавать его)
в чем вопрос ?


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

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