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);

したがって、describeTypeは、 aNumberanIntの両方が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 または任意の丸め浮動小数点数がある場合、データを受け取った場所でデータを読み取るときに問題が発生するよりも、double または float の代わりに整数が書き込まれることです。 、9.0 は int ではなく double として記述されると予想されるためです。

編集: 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 に答える