2010-06-08 56 views
0

有没有在Actionscript中动态投射的方法?我想做到的是通过下面的代码所示:动态投射在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; 

我寻找类似以下伪代码:

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

是的,我已经意识到,“EVAL”是上不了台面也不是如何使用它。

什么是正确的方法?

+0

这个问题已被问到http://stackoverflow.com/questions/2016201/dynamic-object-initiation-as3 – phwd 2010-06-09 00:13:46

回答

-1

不太确定你究竟是什么(你的例子有点令人困惑),但我会尽力回答。

只有在创建变量时才可以键入变量。您可以执行下列操作之一来更改变量的类型,但您必须创建新类型的新变量。

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]" 

这是有些不好的做法,并且软件设计不好。但有时你必须做你必须做的事! How bad is dynamic casting?

+0

这不会告诉我任何关于如何动态投射它的任何事情,即:当目标类型只有在运行时才知道。 – Joshua 2010-06-08 23:17:18

+0

如果您正在动态投射,则只有在运行时才会知道该类型!?!这基本上是“动态投射”的定义, – 2010-06-08 23:40:14

1

你必须发挥在try-catch游戏,但谷歌上搜索一些flash.utils会希望是你的目的的手段:

getDefinitionByName(getQualifiedClassName(variable)) 

你可能必须进口所有你打算在某个地方使用不同的'类型',但这应该让你开始。