Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Определение типа переменной. typeof проблема. (http://www.flasher.ru/forum/showthread.php?t=144642)

Gogan 17.09.2010 11:34

Определение типа переменной. typeof проблема.
 
Нужно определить тип свойства, в моем случае, тип значения , которое возвращает getter.

Код AS3:

    private var _str:String;
 
    public function get str():String
    {
        return _str;
    }
 
    public function set str(value:String):void
    {
        _str = value;
    }
 
private var someFunct():void{
    var hh:* = getQualifiedClassName(this["str"]);//null
    var dt:* = describeType(this["str"]);//'<type name="null" isDynamic="false" isFinal="true" isStatic="false"/>'
    var ss:Boolean = _str instanceof String;//false
 
    var string:String = typeof(this.str);//string
    var necessaryValue:String = typeof(this["str"]);//НУЖНО ИМЕННО ЭТО!!!!!!!!!!!
}

Повторюсь, меня устраивает Только этот вариант: typeof(this["str"]) =="string") Так как имя свойства я читаю из XML. Если инициализировать переменную со старта, то я получу нужный результат:
Код AS3:

private var _str:String = "some string value";
...
trace(typeof(this["str"]));//string

Но опять же мне я не знаю инициализирована переменная или нет и инициализировать её не могу...
Как мне добиться нужного результата? То есть зная имя свойства (String) , получить тип этого свойства ?

-De- 17.09.2010 11:57

Я кроме последнего предложения почти ничего не понял =\ Что же хочется?
String - не имя св-ва (имя св-ва - _str или str), а название класса. Ну собсно getDefinitionByName это
Код AS3:

var foo:* = new (getDefinitionByName("String") as Class)("preved");
            trace(foo);


Gogan 17.09.2010 12:44

А ведь я так старался попонятнее объяснить :) ...
Код AS3:

 
    private var _str:String;
 
    public function get str():String
    {
        return _str;
    }
 
    public function set str(value:String):void
    {
        _str = value;
    }
 
private var someFunct():void{
    trace( typeof(this.str) );//string - (возвращает то, что нужно, но мне не подходит
                                      //такое обращение к свойству (this.str)   
    trace( typeof(this["str"]) );//object - а мне нужно "string",и мне нужно именно
                                        //такое обращение к свойству (this["str"]) 
}

Мне нужно по имени свойства получить тип значения которое оно может принимать. В моем случае мне нужно как то определить, что свойство (str) принимает значение String.

-De- 17.09.2010 14:04

А, понял, пока не проинитить _str getQualifiedClassName нулл возвращает. Возникают тупые вопросы почему бы не вбить String жестко, т.к. 1) геттер может вернуть только строку или нулл 2) переменная, которую возвращает геттер тоже нулл, либо строка 3) почему бы не проинитить пустой строкой. Ну и собсно по указателю с каким-то типом в общем случае может находиться другой тип и до его инициалиализации тип узнать нельзя (это про getQualifiedClassName). typeof, похоже, может рассказать про неинициализированную переменную, но, похоже по тем самым причинам немного http://www.adobe.com/livedocs/flash/...rs.html#typeof
Возможно, хватит приведения того, что возвращает typeof, к кошерному виду (вроде string -> String).

i.o. 17.09.2010 14:23

Цитата:

В моем случае мне нужно как то определить, что свойство (str) принимает значение String.
Используйте describeType()

etc 17.09.2010 14:28

Код AS3:

var str:String;
var n:String = 'str';
trace(describeType(this).variable.(@name==n).@type);

В вашем случае надо вместо variable — accessor.

Gogan 17.09.2010 15:47

rascheska
 
АААААААААААААА, descrybeTypes() нужно не к свойтву, а к объекту применять и далее искать нужный getter!!!!

i.o. 17.09.2010 16:13

Gogan, какие-то проблемы?

Gogan 17.09.2010 16:15

etc - вы просто рвёте ! Огромное спасибо. Ваши ответы можно найти по всему интернету и они всегда адекватные и бьют точно в цель ! недавно мне тоже очень помог один ваш пост, сдвинул с мертвой точки.


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

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