2010-03-06 21 views
21

¿Hay alguna manera de definir una enumeración en AS3 de una manera que lo hacemos en otros idiomas? Puedo definir constantes con valores definidos como ese:¿Cómo se define enum en as3?

private const CONST_1:int = 0; 
private const CONST_2:int = 1; 
private const CONST_3:int = 2; 

y así sucesivamente. Si quiero insertar alguna otra constante entre 3 éstas Necesito mover todos los valores de esa manera:

private const CONST_1:int = 0; 
private const CONST_2:int = 1; 
private const CONST_2A:int = 2; 
private const CONST_3:int = 3; 

mientras que en otra lengua que terminaría sólo con la adición de un nuevo miembro es posible enumerar el cierre de esa manera:

enum { 
    CONST_1 = 0, 
    CONST_2, 
    CONST_2A, 
    CONST_3 
} MyConstEnum; 

¿Tiene AS3 algo similar?

Gracias

Respuesta

10

se puede echar un vistazo a la variedad de tipos de variables que admite la máquina virtual de ActionScript. Los tipos de variables son anotados por rasgos, la variedad de que se puede encontrar en el specification, tabla 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 

No hay Trait_Enum y tenga en cuenta que bajo Trait_Const descripción, únicas constantes de la piscina constante están permitidos, por lo que sería:

  • enteros con signo
  • enteros sin signo
  • duplica
  • cadenas
  • nombres de tipos y tipos de vectores

enumeraciones se podrían hacer de enteros con o sin signo, por ejemplo, pero la máquina virtual no realizaría ninguna comprobación de seguridad de tipos de las operaciones, que en esos tipos. (Por ejemplo, los códigos de operación getlocal o coerce utilizados sería getlocal_i y coerce_i, respectivamente.)

El formato ABC no tiene ninguna disposición incorporado para tipos de enumeración, que yo sepa.

El uso de un tipo de objeto para cada valor de enumeración podría trabajar, especialmente si el compilador emite coerce instrucciones para ese tipo antes de usos de getlocal y de otra manera no utiliza el objeto que no sea en istype y astype variantes. Por ejemplo, llamar al setproperty o getproperty en el objeto sería más lento que usar un número entero, especialmente si esa propiedad está vinculada a un método getter o setter.

Hay estilos de reemplazo que se han vinculado en otras respuestas. Para evaluar el impacto en el rendimiento del tiempo de ejecución de estos estilos, puede usar swfdump -D de la colección de herramientas Flash de código abierto swftoools.

+0

Gracias por la explicación detallada. –

11
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++;