【发布时间】:2012-10-08 17:28:58
【问题描述】:
我想获得我的号码的声明类型,但我不知道如何获得它们。于是我写了一个可能检测方法的测试:
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 作为数字
** 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 作为整数
** 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 作为整数
** 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,结果令人困惑且不一致。
出于调试目的(并且只是为了了解其工作原理),我想要我声明的类型。如何创建一个返回正确类型的函数?
【问题讨论】:
-
看看这个:var a:Number = 3; trace(getQualifiedClassName(a));//int a+=.5; trace(getQualifiedClassName(a));//编号
标签: actionscript-3 flash actionscript types numbers