![]() |
Узнать класс экземпляра вызвавший статичный метод класса. Как?
У меня есть класс Vector2 (обычный математический вектор со всеми функциями)
Я хочу сделать что-то вроде дебаг отрисовки всех его экземпляров. Но дабы не смешивалить все вектора хочу сделать рисование разными цветами на разных "слоях". идентификатор слоя — это хэш имени класса экземпляра, который вызвал конструктор Vector2. Вопрос: Как узнать в конструкторе Vector2 кто его вызвал, НЕ ПЕРЕДАВАЯ ПАРАМЕТРОВ (Хочется универсальности) Думал как то обыграть через arguments.callee но хозяина функции тоже не понял как найти. |
Увы, никак. Только даже если можно было бы — Вам бы это не помогло.
Приведите пример кода, как бы Вы хотели это дело видеть, может я не понимаю чего. |
Класс Main
Код AS3:
Код AS3:
Код AS3:
ну разумеется соверадийть toString() у всех |
Код AS3:
Я вот проникнутся идеей так и не могу. Врубили дебаг, создали вектор и тут же его надо отрисовать в объекте, который его создал? А что если этот объект не DisplayObject? |
никто не сказал что в том же объекте.
имена типов нужны для разных цетов, а рисоваться все будет в отдельных дебаг слой Добавлено через 2 минуты и да на счет дикшинари - weak references не работают. GC не отметает удаленные объекты потому что ссылки остаются в словаре. в каких точно случаях - не знаю, но мемори лики мне не нужны. |
Цитата:
Код AS3:
Код AS3:
Цитата:
У экземпляра должен быть метод debugTrace(), который может дёрнуть статичный метод и передать ему ссылку на себя. |
дело в том что использование объектов в виде ключей расценивается как ссылка на этот объект и гарбиджколлектор не будет удалять этот объект из оперативки пока на него есть хоть одна ссылка. В случае с объектам дисплей листе (например со снегом программным был случай) по непонятным причинам после удаления они не удаляются из памяти при использовании дишенари.
Зная экземпляр можно узнать тип (класс) и привести его к строке. Ничего дополнительного в класс Vector2 передаваться не может. |
Цитата:
Цитата:
Кстати, а когда использовали Object — проблемы не было? Я всё ещё могу достучаться до объекта через myHash.myObject Ну как Вы будете вызывать метод, который отрисует этот вектор? |
Цитата:
или планируется работа приложения в режиме 24х365? мне кажется, в последнее время вокруг GC какой-то ненужный ажиотаж поднялся. А по сабжу - я недавно хотел сделать аналогичную штуку типа статического трейсера, который сообщал бы, из какого метода какого экземпляра его вызвали. Общим собранием было решено, что это невозможно. Были идеи насчет анализа стека объекта Error (там есть метод, который возвращает стек вызовов на текущий момент), можно сюда покопать. |
Error#getStackTrace.
Он возвратит только строчку кода и имя класса, но не ссылку на экземпляр. К тому же в релиз-плеере данная фишка недоступна. |
| Часовой пояс GMT +4, время: 08:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.