我正在尝试使用 Actionscript 3 进行一些反思,但发现了一个问题。
下面的函数接收变量类型(int、Number、Boolean)的数据。然后它将数据及其类型传递给将根据类型执行某些操作的方法。
function aFuncWithVarAgs(... data):void
{
for(var i:uint=0; i < data.length; i++)
{
var typeName:String = describeType(data[i]).@name;
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 写成双精度而不是整数。
编辑:有一种方法可以在将参数传递给使用 varargs 声明的函数时强制执行类型,或者在不使用 lib 的情况下执行此操作的更好方法?
干杯!