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 または任意の丸め浮動小数点数がある場合、データを受け取った場所でデータを読み取るときに問題が発生するよりも、double または float の代わりに整数が書き込まれることです。 、9.0 は int ではなく double として記述されると予想されるためです。
編集: varargsで宣言された関数にパラメーターを渡すときに型を強制する方法、またはlibを使用せずにこれを行うより良い方法はありますか?
乾杯!