2

我正在尝试使用 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);

所以,describeTypeaNumberanInt都是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 的情况下执行此操作的更好方法?

干杯!

4

1 回答 1

0

如果您只需要类名,您可以使用getQualifiedClassName而不是describeType

var n:Number = 11.1;
var i:int = 11;
trace(getQualifiedClassName(n));
trace(getQualifiedClassName(i));
于 2012-07-27T14:38:29.063 回答