Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Action script 2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 14.11.2004, 04:34
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 1  
Diomas
 
Аватар для Diomas

Регистрация: Nov 2001
Адрес: spb.ru
Сообщений: 177
По умолчанию Параметр по ссылке

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

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

function change(param) {
	param = 0;
}

Старый 14.11.2004, 05:34
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 2  
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
При передаче простых типов данных они, если не ошибаюсь, всегда передаются по значению, то есть либо пользуемся извратом типа

Код:
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;
}

Старый 14.11.2004, 06:11
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 3  
Diomas
 
Аватар для Diomas

Регистрация: Nov 2001
Адрес: spb.ru
Сообщений: 177
Не хотелось бы "пользоваться извратом"... =)
Т.е. можно передавать параметры по ссылке как элементы массива, чтобы не передавать ссылки на объект и имя свойства, насколько я понял?

Старый 14.11.2004, 07:01
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 4  
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Да, можно передавать как массив, но тогда изменения произойдут в массиве.

Поэтому не проще ли использовать что-то похожее на
Код:
var a = 10;
function Nullizer() {
	return 0;
}

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


Последний раз редактировалось Bad Habit; 14.11.2004 в 07:03.
Старый 14.11.2004, 07:38
Diomas вне форума Посмотреть профиль Отправить личное сообщение для Diomas Найти все сообщения от Diomas
  № 5  
Diomas
 
Аватар для Diomas

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

Старый 14.11.2004, 11:40
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 6  
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Я понимаю, что тебе это нужно не для банального обнуления, имелось ввиду, что использовать массив как промежуточный этап -- скорее всего, способ не лучший.

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

Старый 14.11.2004, 21:47
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
silin
 
Аватар для silin

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


Последний раз редактировалось silin; 14.11.2004 в 21:49.
Создать новую тему   Часовой пояс GMT +4, время: 01:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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