有没有办法在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”不在桌面上,也不是人们会如何使用它。
什么是正确的方式?
答案 0 :(得分:1)
你必须玩try-catch游戏,但谷歌搜索其中的一些flash.utils有望成为你的终极手段:
getDefinitionByName(getQualifiedClassName(variable))
您可能必须将您打算使用的所有不同“类型”导入到某个项目中,但这应该可以帮助您入门。
答案 1 :(得分:1)
你可能正在寻找这样的东西:
http://benrimbey.wordpress.com/2009/06/20/reflection-based-json-validation-with-vo-structs/
检查“mapToFlexObjects”功能。他基本上是从文本中读取并在运行时分配类。
答案 2 :(得分:-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?