2010-06-08 6 views
0

Existe-t-il un moyen de lancer dynamiquement dans ActionScript? Ce que je veux accomplir est illustré par le code suivant:Coulée dynamique dans 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; 

Je cherche quelque chose comme le pseudo-code suivant:

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

Oui, je me rends compte déjà que « eval » ne figure pas sur la table et ce n'est pas comme ça qu'on l'utiliserait.

Quelle est la bonne façon?

+0

Cette question a été demandée antérieurement http://stackoverflow.com/questions/2016201/dynamic-object-initiation-as3 – phwd

Répondre

-1

Je ne sais pas exactement ce que vous cherchez (votre exemple est un peu confus), mais je vais essayer de répondre.

Vous pouvez transtyper une variable uniquement lorsque vous créez une variable. Vous pouvez effectuer l'une des opérations suivantes pour modifier le type d'une variable, mais vous devez créer une nouvelle variable du nouveau type.

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

ou

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

Si vous utilisez les astérisques (*) comme type variable, ce que jamais vous définissez la variable, il deviendra ce type. Essayez ceci comme un test:

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

Ceci est un peu une mauvaise pratique, et une mauvaise conception du logiciel. Mais parfois tu dois faire ce que tu dois faire! How bad is dynamic casting?

+0

Cela ne me dit rien du tout sur la façon de le lancer dynamiquement ie: Quand le type de destination de la distribution est seulement connu à l'exécution. – Joshua

+0

Si vous lancez dynamiquement, le type ne sera connu que lors de l'exécution!?! C'est essentiellement la définition de "casting dynamique" –

1

Vous devez jouer le jeu try-catch, mais googler certains de ces flash.utils nous l'espérons être un moyen à votre fin:

getDefinitionByName(getQualifiedClassName(variable)) 

Vous devrez probablement importer tous des différents types que vous avez l'intention d'utiliser dans le projet quelque part, mais cela devrait vous aider à démarrer.