Форум 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=131212)

Mur4ik 15.10.2009 12:08

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

Например:
Код 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();
                }
        }
}


Felicast 15.10.2009 12:16

можно попробовать пройтись по стеку

incoob 15.10.2009 12:30

Код AS3:

try{var s:String = null; s.charAt(0)} catch (e:Error) {trace(e.getStackTrace())}


dimarik 15.10.2009 12:37

Код AS3:

try {
        throw new Error('StackTrace');
} catch (error:Error) {
        trace(error.getStackTrace());
}


Mur4ik 15.10.2009 12:42

Похоже то что нужно, спасибо.
И это единственный вариант (уже ради спортивного интереса :))?

etc 15.10.2009 12:46

Это работает только в debug-плеере.

Felicast 15.10.2009 13:03

Цитата:

Код AS3:

var s:String = null; s.charAt(0)


забавный способ вызвать исключение:)

etc 15.10.2009 13:11

Извращенцы.
Код AS3:

trace(new Error().getStackTrace());


Mur4ik 15.10.2009 13:19

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());


incoob 15.10.2009 13:49

Цитата:

Сообщение от Felicast (Сообщение 858032)
забавный способ вызвать исключение:)

Действительно, что-то я переборщил:)


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

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