Apache flex ActionScript中的动态强制转换
有没有办法在Actionscript中动态强制转换?下面的代码说明了我想要完成的任务:Apache flex ActionScript中的动态强制转换,apache-flex,flash,actionscript-3,actionscript,air,Apache Flex,Flash,Actionscript 3,Actionscript,Air,有没有办法在Actionscript中动态强制转换?下面的代码说明了我想要完成的任务: var Val:*; var S:String=SomeTextEdit.text; switch (DesiredTypeTextEdit.text) { case 'int':Val=int(S);break; case 'uint':Val=uint(S);break; case 'Strin
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”并没有摆在桌面上,人们也不会这样使用它
正确的方法是什么?不太确定你到底想要什么(你的例子有点混乱),但我会尝试回答 只有在创建变量时才能键入强制转换变量。可以执行以下操作之一来更改变量的类型,但必须创建新类型的新变量
var foo:Number = 230;
var foo2:int = foo as int;
或
如果使用星号(*)作为变量类型,那么无论您将变量设置为什么类型,它都将成为该类型。尝试以下测试:
var foo:* = new Sprite();
trace(foo); // Traces: "[object Sprite]"
这是一种有点糟糕的做法,也是糟糕的软件设计。但有时候你得做你该做的!
您将不得不玩try-catch游戏,但谷歌搜索其中一些flash.utils有望成为您达到目的的一种手段:
getDefinitionByName(getQualifiedClassName(variable))
您可能需要将您打算使用的所有不同“类型”导入到项目的某个位置,但这应该可以让您开始了。您可能正在寻找类似以下内容:
检查“mapToFlexObjects”功能。他基本上是从文本中阅读,并在运行时分配类 这并没有告诉我关于如何动态强制转换的任何内容,即:当强制转换的目标类型仅在运行时已知时。如果您是动态强制转换,则该类型仅在运行时已知!?!这基本上就是“动态铸造”的定义,这个问题以前被问过
getDefinitionByName(getQualifiedClassName(variable))