有没有办法在AS3中以我们在其他语言中的方式定义枚举?我可以用这样的定义值定义常量:
private const CONST_1:int = 0; private const CONST_2:int = 1; private const CONST_3:int = 2;
等等.如果我想在3之间插入一些其他常量,我需要移动所有这样的值:
private const CONST_1:int = 0; private const CONST_2:int = 1; private const CONST_2A:int = 2; private const CONST_3:int = 3;
而在其他语言中,我最终只会添加一个新的成员来枚举闭包:
enum { CONST_1 = 0, CONST_2, CONST_2A, CONST_3 } MyConstEnum;
AS3有类似的东西吗?
谢谢
没有AS3没有枚举,你必须自己编写代码.如果您想要更安全的类型检查,可以通过类来模拟它们:
http://www.herrodius.com/blog/87
http://scottbilas.com/blog/faking-enums-in-as3/
http://www.kirupa.com/forum/showthread.php?t=297579
public static var NUM_ENUM_VALUES:int = 0; public static const EV_MONDAY:int = NUM_ENUM_VALUES++; public static const EV_TUESDAY:int = NUM_ENUM_VALUES++; public static const EV_WEDNESDAY:int = NUM_ENUM_VALUES++; public static const EV_THURSDAY:int = NUM_ENUM_VALUES++;
您可以查看ActionScript虚拟机支持的各种变量类型.变量类型由特征注释,其性质可在规范中找到,表4.8.1:
4.8.1 Summary of trait types The following table summarizes the trait types. Type Value Trait_Slot 0 Trait_Method 1 Trait_Getter 2 Trait_Setter 3 Trait_Class 4 Trait_Function 5 Trait_Const 6
没有Trait_Enum
,请注意,在Trait_Const
描述中,只 允许来自常量池的常量,因此它将是:
签名整数
无符号整数
双打
字符串
类型名称和矢量类型
例如,枚举可以由有符号或无符号整数组成,但虚拟机不会对使用这些类型的操作执行任何类型安全检查.(例如,使用的getlocal
或者coerce
操作码分别是getlocal_i
和coerce_i
.)
ABC格式没有任何我知道的枚举类型的内置规定.
为每个枚举值使用对象类型可能有效,特别是如果编译器coerce
在使用之前发出该类型的指令getlocal
,否则不使用除in istype
和astype
variant 之外的对象.例如,调用setproperty
或getproperty
在对象上比使用整数要慢 - 特别是如果该属性绑定到getter或setter方法.
有替换样式已在其他答案中链接.为了评估这些样式运行时性能的影响,你可以使用swfdump -D
从swftoools开放源代码的Flash工具的集合.