宣言された型を自分の番号で取得したいのですが、取得する方法がわかりません。だから私は可能な検出方法でテストを書きました:
logNumber(Number(3.5), "Number");
logNumber(Number(3), "Number");
logNumber(Number(-3), "Number");
logNumber(uint(3), "uint")
logNumber(int(3), "int")
logNumber(int(-3), "int")
function logNumber(value:*, expected:String):void
{
trace("\n\n\n ");
trace("** Input value: " + value + "\n** Expected: " + expected + "\n")
trace("getQualifiedClassName: ", getQualifiedClassName(value) + check(getQualifiedClassName(value), expected));
switch (value)
{
case value as uint:
{
trace('as: uint' + check('uint', expected));
break;
}
case value as int:
{
trace('as: int' + check('int', expected));
break;
}
case value as Number:
{
trace('as: Number' + check('Number', expected));
break;
}
}
if(value is uint) trace("is: uint" + check('uint', expected));
else if(value is int) trace("is: int" + check('int', expected));
else if(value is Number) trace("is: Number" + check('Number', expected));
trace("describeType name:" + describeType(value).@name + check(describeType(value).@name, expected));
trace("typeof: ", typeof(value) + check(typeof(value), expected));
trace("\n" + describeType(value))
}
function check(type:String, expectedType:String):String
{
return "\n » " + (type == expectedType ? "good" : (type.toLowerCase() == expectedType.toLowerCase() ? "almost good" : "wrong"))
}
これにより、次の結果がトレース パネルに出力されます。
数値としての 3.5
** Input value: 3.5
** Expected: Number
getQualifiedClassName: Number
» good
as: Number
» good
is: Number
» good
describeType name:Number
» good
typeof: number
» almost good
<type name="Number" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
数字としての 3
** Input value: 3
** Expected: Number
getQualifiedClassName: int
» wrong
as: uint
» wrong
is: uint
» wrong
describeType name:int
» wrong
typeof: number
» almost good
<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
-3 as Number
** Input value: -3
** Expected: Number
getQualifiedClassName: int
» wrong
as: int
» wrong
is: int
» wrong
describeType name:int
» wrong
typeof: number
» almost good
<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
単位として 3
** Input value: 3
** Expected: uint
getQualifiedClassName: int
» wrong
as: uint
» good
is: uint
» good
describeType name:int
» wrong
typeof: number
» wrong
<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
3 int
** Input value: 3
** Expected: int
getQualifiedClassName: int
» good
as: uint
» wrong
is: uint
» wrong
describeType name:int
» good
typeof: number
» wrong
<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
-3 int
** Input value: -3
** Expected: int
getQualifiedClassName: int
» good
as: int
» good
is: int
» good
describeType name:int
» good
typeof: number
» wrong
<type name="int" base="Object" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Object"/>
<constructor>
<parameter index="1" type="*" optional="true"/>
</constructor>
</type>
分析することはたくさんありますが、いくつかのことが浮かび上がってきています。
- Number が 3.5 の場合は Number として出力されますが、3 の場合は int/uint として出力されます。
- それが uint か int かを検出するのは難しく、結果は混乱し、一貫性がありません。
デバッグ目的で (そしてこれがどのように機能するかを理解するために)、宣言した型が必要です。正しい型を返す関数を作成するにはどうすればよいですか?