2012-07-27 11 views
2

我試圖用Actionscript 3做一些反思並發現問題。當在AS3中使用可變參數時將數字轉換爲int

下面的函數接收變量類型(int,Number,Boolean)的數據。然後它傳遞數據,並將其類型轉換爲根據類型進行操作的方法。

function aFuncWithVarAgs(... data):void 
{ 
    for(var i:uint=0; i < data.length; i++) 
    { 
     var typeName:String = describeType(data[i])[email protected]; 

     doSomethingAccordingToType(typeName, data[i]); 
    } 
} 

問題是,當我這樣做:

var aNumber:Number = 11.0; 
var anInt:int = 11; 

aFuncWithVarArgs(aNumber, anInt); 

因此,的describeType說,雙方aNumber的ANINT是類型INT的。就像這樣:

<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false"> 
    <extendsClass type="Object"/> 
    <constructor> 
     <parameter index="1" type="*" optional="true"/> 
    </constructor> 
</type> 

編輯:我試圖根據類型寫字節的ByteArray。下面是我上面提到的,我應該表現出你的函數:

function doSomethingAccordingToType(typeName:String, data:Object):void 
{ 
    switch (typeName) 
    { 
     case "Number": 
      bytes.writeDouble(data); 
      break; 
     case "int": 
      bytes.writeInt(data); 
      break; 
     ... 
    } 
} 

編輯:所以,再一次,問題是,當我有,比如說9.0或任何一輪浮點數,我將有一個整數寫入而不是雙精度或浮點數,比我在接收數據時讀取數據時會遇到問題,因爲我期望9.0寫成double而不是int。

編輯:在將參數傳遞給用可變參數聲明的函數時,還是有一種強制類型的方法,或者更好的方法是在不使用lib的情況下執行此操作?

乾杯!

+0

是的,這很奇怪。注意到,它仍然是數字,如果初始化它與11.01例如 – 2012-07-27 14:34:07

+1

也許某種由閃存編譯器優化? – danii 2012-07-27 14:43:46

+0

是的,如果它是一個整數,即使它是一個浮點數(AS中的Number),它也會被轉換爲int。 – salaniojr 2012-07-27 14:47:44

回答

0

如果你只需要類的名稱,你可以使用getQualifiedClassName代替describeType

var n:Number = 11.1; 
var i:int = 11; 
trace(getQualifiedClassName(n)); 
trace(getQualifiedClassName(i)); 
+0

這很好,但是當我在我的例子中將變量傳遞給函數(用可變參數)時,你會得到我的錯誤。 – salaniojr 2012-07-27 14:45:33

相關問題