2010-06-08 66 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)) 

你可能必須進口所有你打算在某個地方使用不同的'類型',但這應該讓你開始。