Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   var dump (http://www.flasher.ru/forum/showthread.php?t=207988)

es2 25.05.2014 09:53

var dump
 
Подскажите, существует ли в as3 что-то более продвинутое чем trace, с тем чтобы можно было определить к какому типу относится объект (и вообще объект ли это), какое значение имеет, обладает ли ещё какими-то доп. свойствами или методами (соответственно тогда какие у них значения, свойства методы), имеются ли значения undefined или null в каком либо свойстве данного объекта, или может сам объект является таковым.

Короче, что-то типа var_dump() как в php есть ли в as3?

FlasherEgor 25.05.2014 09:56

flash.utils - там есть несколько средств.

Korchy 25.05.2014 10:19

Все это покажет дебаггер и не нужно никаких дополнительных утилит.

es2 25.05.2014 12:24

Цитата:

Сообщение от Korchy (Сообщение 1166571)
Все это покажет дебаггер и не нужно никаких дополнительных утилит.

Вот именно, что дебаггер покажет всё. А мне ненадо всё, мне надо только в конкретном месте посмотреть

Bletraut 25.05.2014 14:14

Ну это и трейсом всё можно выполнить, благо в AS3 там стало можно несколько параметров сразу выводить.

es2 25.05.2014 14:51

представим себе объект:

Код AS3:

var obj:Vector<Object> = new Vector<Object>();
obj.push({tf : new TextField(), st: new String(), b : true});
obj.push({ta : new TextArea(), nb: 12, bs : new Object()});
obj.push({sp : new Sprite(), n: null, de : new DispatchEvent()});

как видите будет далеко не полная информация (если точнее, то вообще никакой полезной информации) даже если мы применим вот такую конструкцию:
Код AS3:

var i:int = obj.length;
while(--i > -1)
{
trace(obj[i])
}


FlasherEgor 25.05.2014 15:03

Можно так попробовать:
Код AS3:

function explore(target:Object):void
{
  for (var prop:String in obj)
  {
      trace('property: ' + prop + ' value: ' + obj[prop]);
  }
}

Но я не знаю, насколько верен и хорош такой способ.

Добавлено через 8 минут
Да, он не со всеми объектами работает...

Добавлено через 16 минут
Вот улучшенный вариант:
Код AS3:

public function exploreObject(o:Object, recursive:Boolean = true, logOffset:String = ''):void
        {
                for (var prop:String in o)
                {
                        trace(logOffset + 'property: ' + prop + ' value:', o[prop]);
                        if (recursive) exploreObject(o[prop], recursive, logOffset + '  ');
                }
        }

Опять же, работает, но не со всеми объектами, и не может просмотреть всё.

es2 25.05.2014 21:34

мне думается, что если по логике, то сперва нужно определить является ли переданное значение переменной или объектом, если это переменная, то выводим на экран её тип и значение, в том числе и значение undefined. Если же мы определили, что это объект и его значение не null, тогда вызываем эту же функцию рекурсивно. Хотя это тоже, мне думается не идеальный вариант, потому как такие объекты как DisplayObject нужно рассматривать в данном контексте как переменную

КорДум 25.05.2014 21:51

Для дебага разработки — дебаггер в используемой IDE. Для рантайма продакшена или той же разработки и перестаем изобретать велосипеды.

caseyryan 25.05.2014 21:58

Цитата:

является ли переданное значение переменной или объектом
Что-то я логики не улавливаю. Как можно сравнивать переменную и объект?
Цитата:

и вообще объект ли это
В ас3 абсолютно всё является объектами. В нем даже примитивов нет, Boolean и int и те являются объектами

Как и в любом другом языке (ну, почти), чтобы трейс выводил подробную информацию, у этого объекта должен быть метод toString() с подробным описанием всего необходимого.

Но если совсем по теме, то отладчик вам в помощь. В Adobe Flash CS* его нет, но он есть в любой нормальной IDE типа Flash Builder или FlashDevelop


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

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