我試圖用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的情況下執行此操作?
乾杯!
是的,這很奇怪。注意到,它仍然是數字,如果初始化它與11.01例如 – 2012-07-27 14:34:07
也許某種由閃存編譯器優化? – danii 2012-07-27 14:43:46
是的,如果它是一個整數,即使它是一個浮點數(AS中的Number),它也會被轉換爲int。 – salaniojr 2012-07-27 14:47:44