有没有办法以我们在其他语言中的方式在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有类似之处吗?
由于
答案 0 :(得分:25)
没有AS3没有枚举,你必须自己编码。如果您想要更安全的类型检查,可以通过类来模拟它们:
答案 1 :(得分:12)
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++;
答案 2 :(得分:10)
您可以查看ActionScript虚拟机支持的各种变量类型。变量类型由 traits 注释,其中的各种类型可在specification中找到,表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
指令,否则不会使用istype
以外的对象1}}和astype
变种。例如,在对象上调用setproperty
或getproperty
比使用整数要慢 - 特别是如果该属性绑定到getter或setter方法。
在其他答案中有替换样式。要评估这些样式对运行时性能的影响,您可以使用swftoools开源Flash工具集中的swfdump -D
。