Динамическое приведение в ActionScript - PullRequest
0 голосов
/ 09 июня 2010

Есть ли способ динамического приведения в Actionscript? То, что я хочу сделать, иллюстрируется следующим кодом:

        var Val:*;
        var S:String=SomeTextEdit.text;
        switch (DesiredTypeTextEdit.text) {
          case 'int':Val=int(S);break; 
          case 'uint':Val=uint(S);break; 
          case 'String':Val=String(S);break; 
          case 'Number':Val=Number(S);break; 
          ...
        }
        SomeDisplayObject[SomePropertyNameTextEdit.text]=Val;

Я ищу что-то вроде следующего PSEUDOCODE:

SomeDisplayObject[SomePropertyName]=eval(DesiredType)(SomeTextEdit.text);

Да, я уже понимаю, что «eval» не находится на столе, и при этом он не используется.

Что ПРАВИЛЬНО?

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Вам придется сыграть в игру try-catch, но поиск в некоторых из этих flash.utils, надеюсь, будет средством для вашей цели:

getDefinitionByName(getQualifiedClassName(variable))

Вам, вероятно, придется импортировать все различные «типы», которые вы собираетесь использовать в проекте, но это должно помочь вам начать работу.

1 голос
/ 09 июня 2010

Возможно, вы ищете что-то вроде этого:

http://benrimbey.wordpress.com/2009/06/20/reflection-based-json-validation-with-vo-structs/

Проверьте функцию mapToFlexObjects. Он в основном читает из текста и назначает классы во время выполнения.

0 голосов
/ 09 июня 2010

Не совсем уверен, что именно вам нужно (ваш пример немного сбивает с толку), но я постараюсь ответить.

Вы можете приводить переменную только при ее создании. Вы можете выполнить одно из следующих действий, чтобы изменить тип переменной, но вы должны создать новую переменную нового типа.

var foo:Number = 230;
var foo2:int = foo as int;

или

var foo:Number = 230;
var foo2:int = int(foo);

Если вы используете звездочки (*) в качестве типа переменной, то, что бы вы ни указали для переменной, она станет этим типом. Попробуйте это как тест:

var foo:* = new Sprite();
trace(foo); // Traces: "[object Sprite]"

Это несколько плохая практика и плохой дизайн программного обеспечения. Но иногда ты должен делать то, что должен! Насколько плохое динамическое приведение?

...