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

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

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

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию Как узнать откуда вызван статический метод?

Есть некий утилитный класс со статическим методом. Возможно ли узнать, не передавая ссылку, из какого класса или даже метода вызывается этот метод?

Например:
Код AS3:
package  
{
	public class SomeUtils
	{
		static public function foo():void
		{
			var context:* = // откуда вызван этот метод, например что вызван из SomeClass.someMethod
			trace("Метод вызван из: " + context);
		}
	}
}
Код AS3:
package  
{
	public class SomeClass
	{
		public function SomeClass() { someMethod() }
 
		public function someMethod():void
		{
			SomeUtils.foo();
		}
	}
}
__________________
trace("Остановите Землю, я сойду!!!");

Старый 15.10.2009, 12:16
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 2  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
можно попробовать пройтись по стеку
__________________
я могу стать всем, если только захочу

Старый 15.10.2009, 12:30
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 3  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Код AS3:
try{var s:String = null; s.charAt(0)} catch (e:Error) {trace(e.getStackTrace())}

Старый 15.10.2009, 12:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
try {
	throw new Error('StackTrace');
} catch (error:Error) {
	trace(error.getStackTrace());
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 15.10.2009, 12:42
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 5  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Похоже то что нужно, спасибо.
И это единственный вариант (уже ради спортивного интереса )?
__________________
trace("Остановите Землю, я сойду!!!");

Старый 15.10.2009, 12:46
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Это работает только в debug-плеере.

Старый 15.10.2009, 13:03
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 7  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Код AS3:
var s:String = null; s.charAt(0)
забавный способ вызвать исключение
__________________
я могу стать всем, если только захочу

Старый 15.10.2009, 13:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Извращенцы.
Код AS3:
trace(new Error().getStackTrace());

Старый 15.10.2009, 13:19
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 9  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
etc, красивее уже некуда.

Всем огромное спасибо.

Update:
Раз уж затеял кашу, хочу закончить красиво
Вот только с регулярными выражениями не дружу, и времени нет разбираться, может кто-то подскажет по элегантнее решение чем то что получилось у меня?

Код AS3:
var caller:String = new Error().getStackTrace();
caller = caller.split("at ")[2];
caller = "line:" + caller.substring(caller.lastIndexOf(":") + 1, caller.length - 3) + " >> " + caller.substr(0, caller.indexOf(")") + 1);
trace("caller >> " + caller + " >> " + new Date().toLocaleTimeString());
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 15.10.2009 в 13:36.
Старый 15.10.2009, 13:49
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 10  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Цитата:
Сообщение от Felicast Посмотреть сообщение
забавный способ вызвать исключение
Действительно, что-то я переборщил

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

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

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


 


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


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