Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ссылка на объект другого класса (http://www.flasher.ru/forum/showthread.php?t=137596)

Obi 18.03.2010 21:14

Цитата:

Сообщение от treety (Сообщение 894058)
вот я и хочу узнать как мне передать ссылку на переменную а не на значение
можете рассказать?

Мой кусок кода работает. Ну должен, по крайней мере. Если вы заметили, в исправленном мной варианте вызывается переданная в параметре функция, которой в качестве параметра передается результат. Она и записывает результат в нужную вам переменную.

expl 18.03.2010 21:35

Код AS3:

class Link
{
    public var target:TypeOfLinkedObject
}

Вот эту ссылку и передаём и из нее и читаем:)

treety 18.03.2010 22:27

Цитата:

Мой кусок кода работает. Ну должен, по крайней мере. Если вы заметили, в исправленном мной варианте вызывается переданная в параметре функция, которой в качестве параметра передается результат. Она и записывает результат в нужную вам переменную.
да
кусок работает
но функция callback была для примера
а если у меня будет, скажем, тысяча переменных
то для них писать тысячу функций?
если бы вопрос стоял в том как с помощью функции передать
то тогда да..тот пример - то что нужно
но всё таки я хочу получить прямую ссылку на переменную
или это не возможно?

Цитата:

Вот эту ссылку и передаём и из нее и читаем
не представляю как она должна работать..
я просто в АС3 не настолько шарю.. =(

Котяра 18.03.2010 23:36

простые типы Number,int,String передаются по значению
все остальные по ссылке - но не по адресу
так
Код AS3:

function test(o:object)
{
o=null;// на самом деле зануляется локальная переменная o
}
function test2(o:object)
{
o.x=null;
}
var o:Object ={x:1}
test(o);
trace(o.x) // =1;
test2(o);
trace(o.x) //null;// исправлено


etc 19.03.2010 08:06

Цитата:

Сообщение от Котяра (Сообщение 894100)
простые типы Number,int,String передаются по значению
все остальные по ссылке - но не по адресу
так
Код AS3:

function test(o:object)
{
o=null;// на самом деле зануляется локальная переменная o
}
function test2(o:object)
{
o.x=null;
}
var o:Object ={x:1}
test(o);
trace(o.x) // =1;
test2(o);
trace(o.x) // ERROR 1009;


1009? Да ну, а я думал, что null.

Котяра 19.03.2010 10:50

Цитата:

Сообщение от etc (Сообщение 894134)
1009? Да ну, а я думал, что null.

недокопипастил
Код AS3:

function test(o:Object)
{
o=null;// на самом деле зануляется локальная переменная o
}
function test2(o:Object)
{
o.x=null;
}
var o:Object ={x:1}
test(o);
trace(o.x) // =1;
test2(o);
trace(o.x) // null;
o=null;
trace(o.x)//error 1009;


treety 19.03.2010 13:38

тут то понятно
эти переменные в одной области видимости находяцца
ну а как между классами ссылки передавать?
и вообще возможно ли это?

expl 19.03.2010 23:12

а чем плоха ссылка в посте 22?

А если нужна "прозрачность" работы со ссылкой - т.е. чтобы было пофиг объект это Link или объект типа TypeOfLink,
делают обертку типа TypeOfLink и делегируют в каждом методе управление в link:
Код AS3:

class MyClassWrapper extends/implements MyClass
{
  public var implementer:MyClass//лучше сеттер-геттер, конечно
 
  public function method0(value0):SomeType
  {
        return implementer.method0(value0);
    }
 
    public function method1(value1):Void
    {
        implementer.mehod1(value1)
    }
    ...
}

Все - объект можно подменять прозрачно для клиента

Добавлено через 13 минут
Код AS3:

_myLink.target == null
if (_myLink.target != null)
{
    ....
}

Один фиг - не напрямую с объектом работаем

treety 23.03.2010 19:30

Цитата:

а чем плоха ссылка в посте 22?
так как пользоваться этим "target"?
я просто так и не разобрался..

пока экспериментировал с таргетом
у меня в итоге получилась такая схема:
Код AS3:

package{
        import flash.display.MovieClip;
        import Multiply;
        public class Main extends MovieClip {
                var _a;
                var _b;
                var res;
                function Main () {
                        res = 0;
                        _a = 20;
                        _b = 40;
                        var mlt = new Multiply ({val_1:_a, val_2:_b}, {dest:this, nam:"res"}, multiplyComplit);
                }
                public function multiplyComplit() {
                        trace (res);
                }
        }
}
 
package{
        public class Multiply{
                var _towrite;
                var _callback;
                function Multiply (toread, towrite , callback) {
                        var reslt = toread.val_1*toread.val_2;
                        towrite.dest[towrite.nam] = reslt;
                        callback ();
                }
        }
}



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

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