![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2010
Адрес: Москва
Сообщений: 8
|
Всем привет!
Может кто знает, возможно ли определить имя функции (объявленное в каком либо классе) из тела самой функции. Определить ссылку на функцию легко: А как получить ее имя? Приведу пример: package { import flash.display.Sprite; public class FunctionsTest extends Sprite { public function FunctionsTest() { super(); testFunction(); } private function testFunction():void { //можно, конечно вывести так trace("testFunction") } } } Пробовал через describeType: Выдает что-то типа: <type name="builtin.as$0::MethodClosure" base="Function" isDynamic="false" isFinal="true" isStatic="false"> <extendsClass type="Function"/> <extendsClass type="Object"/> <accessor name="length" access="readonly" type="int" declaredBy="builtin.as$0::MethodClosure"/> <accessor name="prototype" access="readwrite" type="*" declaredBy="builtin.as$0::MethodClosure"/> </type> Для чего это нужно? Просто было бы удобно логировать вызовы функций. |
|
|||||
|
ветеран форума
|
В нормальных редакторах (например FD или FDT) есть под это дело плагины или сниппеты, по шорткатам генерируют приятного вида трейсы.
Если интересно самому, гляньте на там и имя и строка кода и еще чет полезное найдете для логирования. Работает только в дебаг плеерах (но вы ведь в таком и тестируете?)
__________________
trace("Остановите Землю, я сойду!!!"); |
|
|||||
|
Регистрация: Jun 2010
Адрес: Москва
Сообщений: 8
|
Да это, конечно, даст информацию о точке вызова.
Можно даже извратнуться и взять регулярку от результата, что-то типа: Это выведет название функции в которой сгенерирована ошибка. Но в итоге выглядит страшно, лучше по прежнему пользоваться трейсами и дублировать имена функций... ![]() |
|
|||||
|
ветеран форума
|
Т.е по вашему решение с describeType выглядело бы не таким страшным?
![]() Весь этот "страх" можно запихнуть в пакедж-левел функцию один раз и больше этого не видеть. Даже если вы пишете код во Flash CS*, скорее всего есть возможность написать JSFL команду, которая вам сгенерирует нужного вида трейс.
__________________
trace("Остановите Землю, я сойду!!!"); Последний раз редактировалось Mur4ik; 21.07.2010 в 19:26. |
|
|||||
|
Регистрация: Jun 2010
Адрес: Москва
Сообщений: 8
|
Цитата:
public static function getFunctionName():String { var res:String = ""; var stack:String = new Error().getStackTrace(); if (stack) { var match:Array = stack.match(/getFunctionName.*?at.*?\/(.*?)\(/is); if (match.length >= 2) res = match[1]; } return res; } Спасибо за идею, думаю, для отладки смело можно пользоваться, это намного удобнее дублированных трейсов ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|