当前位置:  开发笔记 > 编程语言 > 正文

如何在as3中定义枚举?

如何解决《如何在as3中定义枚举?》经验,为你挑选了3个好方法。

有没有办法在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有类似的东西吗?

谢谢



1> Patrick..:

没有AS3没有枚举,你必须自己编写代码.如果您想要更安全的类型检查,可以通过类来模拟它们:

http://www.herrodius.com/blog/87

http://scottbilas.com/blog/faking-enums-in-as3/

http://www.kirupa.com/forum/showthread.php?t=297579



2> 小智..:
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++;



3> Heath Hunnic..:

您可以查看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_icoerce_i.)

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

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

有替换样式已在其他答案中链接.为了评估这些样式运行时性能的影响,你可以使用swfdump -D从swftoools开放源代码的Flash工具的集合.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有