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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.10.2007, 03:16
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 1  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
По умолчанию передать ссылку аргументом функции

привет. понадобилась функция, которая бы возвращала несколько значений.
можно передать переменную в функцию ссылкой, а не копией?
__________________
~
Never trouble trouble till trouble troubles you!

Старый 17.10.2007, 03:35
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Первую строчку не понял.
Все простые типы всегда передают только свое значение, а сложные ссылку. Поэтому простые типы надо заключать в сложные.
Код:
//// Простой тип
a = 1;
function test (a:Number) {
	a = 2;
}
test (a);
trace (a) // все равно 1;
//// Сложный тип содержащий простой
b = {a:1};
function test2 (b:Object) {
	b.a = 2;
}
test2 (b);
trace (b.a); // сменилось на 2
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.10.2007, 07:31
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 3  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Что-то я не до конца понимаю...

По-моему первой функции вообще ничего не передается

Код:
root_a = 1;
function test (a:Number) {
	a = 2;
	trace(a) //выводит 2
}
test (a);
trace (a)//выводит undefined
разве первая функция не эквивалентна такой:

Код:
function test()
{
    var a:Number = 2;
}

* * *

C функцией test2 тоже непонятности... а если подправить вот так

Код:
b = {a:1};
function test2 (bbb:Object) {
	b.a = 2;
}
test2 (b);
trace (b.a); // сменилось на 2
то становится ясно что функции без разницы передаем мы ей
ссылку или объект, она обращается напрямую к объекту b лежащему
на руте


Последний раз редактировалось terbooter; 17.10.2007 в 07:49.
Старый 17.10.2007, 08:36
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от terbooter
Что-то я не до конца понимаю...

По-моему первой функции вообще ничего не передается

Код:
root_a = 1; // вот это вот что такое?
function test (a:Number) {
	a = 2;
	trace(a) //выводит 2
}
test (a);
trace (a)//выводит undefined -- не удивительно
разве первая функция не эквивалентна такой:

Код:
function test()
{
    var a:Number = 2;
}
В первой функции a -- параметр, в этой локальная переменная.
* * *

C функцией test2 тоже непонятности... а если подправить вот так

Код:
b = {a:1};
function test2 (bbb:Object) {
	b.a = 2;
}
test2 (b);
trace (b.a); // сменилось на 2
то становится ясно что функции без разницы передаем мы ей
ссылку или объект (объекты не передаются, передается ссылка на объект), она обращается напрямую к объекту b лежащему
на руте -- это и было показано
Цитата:
Сообщение от iNils
Все простые типы всегда передают только свое значение, а сложные ссылку.
.....

Старый 17.10.2007, 08:59
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Код:
b = {a:0, id:'b'};
c = {a:0, id:'c'};
obj = {a:555, id:'obj'};

 myTrace(b);
 myTrace(c);
 myTrace(obj);
trace('---------------');
 test1(b);
 test1(c);
 myTrace(b);
 myTrace(c);
 myTrace(obj);
trace('---------------');
 test2(b);
 test2(c);
 myTrace(b);
 myTrace(c);
 myTrace(obj);

function test1(obj:Object):Void {
//передаем объект параметром,
//но работаем с другим объектом,
//что ни передадим - меняется b
	b.a = 2;
} 
 
function test2 (obj:Object):Void {
//передаем объект параметром
//и работаем с ним - меняется объект который передали,
//а не рутовый obj
	obj.a = 2;
}
function myTrace(obj:Object):Void{
 trace (obj.id + ':' + obj.a);
}


Последний раз редактировалось Kikasso; 17.10.2007 в 09:20.
Старый 17.10.2007, 10:12
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 6  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Я это все к тому, что мне думается, что пример iNils
ни подтверждает, ни опровергает его утверждение.

Пример Kikasso подтверждает, что функции передается ссылка на объект.


Последний раз редактировалось terbooter; 17.10.2007 в 10:24.
Старый 17.10.2007, 10:56
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 7  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от Chas
привет. понадобилась функция, которая бы возвращала несколько значений.
Пускай функция вернет объект, как например getBounds()


Последний раз редактировалось Kikasso; 17.10.2007 в 11:01.
Старый 17.10.2007, 13:52
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от terbooter
Я это все к тому, что мне думается, что пример iNils
ни подтверждает, ни опровергает его утверждение.
Где здесь мое утверждение не подтверждается?
Код:
b = {a:1};
function test2 (b:Object) {
	b.a = 2;
}
test2 (b);
trace (b.a); // сменилось на 2
Именно потому, что передается ссылку на объект, мы смогли изменить значение b.a.

Ваши слова лишь показывают, что вы не разбираетесь в области видимости переменных.
Код:
a = 1;
function test (a:Number) {
	a = 2;
	trace (a) // тут 2
}
test (a);
trace (a) // а тут все равно 1;
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 17.10.2007, 16:09
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 9  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от iNils
Код:
a = 1;
function test (a:Number) {
	a = 2;
	trace (a) // тут 2
}
test (a);
trace (a) // а тут все равно 1;
Не совсем корректный пример.
Код:
a = 1; // а - тут переменная
function test (a) { // а - здесь аргумент функции, по несчастью имеющий то же имя что и переменная
   trace (a) // тут 1 (показывает принятый аргумент)
	a = 2; // собственно аргументу функции переназначается значение равное 2-м
	trace (a) // тут 2 (показывает переназначенный аргумент)
}
test (a);
trace (a) // а тут все равно 1; (показывает переменную, а вовсе не аргумент функции)

Старый 17.10.2007, 16:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от chingachgoog
по несчастью имеющий то же имя что и переменная
...
показывает переменную, а вовсе не аргумент функции
С добрым утром
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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