如何在as3中定义枚举?

时间:2010-03-06 21:23:00

标签: actionscript-3 enumeration

有没有办法以我们在其他语言中的方式在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有类似之处吗?

由于

3 个答案:

答案 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描述下,只允许来自常量池的常量,因此这将是:

  • 签署的整数
  • 无符号整数
  • 双打
  • 字符串
  • 类型名称和矢量类型
例如,枚举可以由有符号或无符号整数组成,但虚拟机不会对使用这些类型的操作执行任何类型安全检查。 (例如,使用的getlocalcoerce操作码分别为getlocal_icoerce_i。)

ABC格式没有任何我知道的枚举类型的内置规定。

对每个枚举值使用对象类型可能会有效,特别是如果编译器在使用coerce之前为该类型发出getlocal指令,否则不会使用istype以外的对象1}}和astype变种。例如,在对象上调用setpropertygetproperty比使用整数要慢 - 特别是如果该属性绑定到getter或setter方法。

在其他答案中有替换样式。要评估这些样式对运行时性能的影响,您可以使用swftoools开源Flash工具集中的swfdump -D