2010-05-21 6 views
0

n'est-il pas possible de définir un tableau statique const? je voudrais avoir un paramètre optionnel à une fonction qui est un tableau de couleurs,ActionScript Définition d'un tableau statique statique

private static const DEFAULT_COLORS:Array = new Array(0x000000, 0xFFFFFF); 

public function myConstructor(colorsArray:Array = DEFAULT_COLORS) 
{ 
} 

je sais que je peux utiliser ... args mais je vouloir en fait de fournir le constructeur avec 2 tableaux distincts comme arguments d'option.

Répondre

3

Pas possible, mais vous pouvez cela pour simuler ce comportement:

private static const DEFAULT_COLORS:Array = new Array(0x000000, 0xFFFFFF); 

public function myConstructor(colorsArray:Array = null) 
{ 
    colorsArray = colorsArray ? colorsArray : DEFAULT_COLORS; 
} 

Cela ne fonctionnera pas si votre fonction est codée de manière telle que nul pourrait être une valeur valide (pour signaler une condition, pour exemple), mais ce n'est probablement pas le cas ici.

Modifier

Si vous prévoyez d'écrire colorsArray dans myConstructor, il serait sage de faire une copie de DEFAULT_COLORS ici:

colorsArray = colorsArray ? colorsArray : DEFAULT_COLORS.slice(); 

La référence au tableau DEFAULT_COLORS est constante, mais son contenu ne l'est pas, donc vous pourriez accidentellement changer vos valeurs par défaut.

+0

merci pour la réponse. fonctionne très bien. Cependant, pouvez-vous expliquer comment je pourrais accidentellement changer les couleurs par défaut en ne faisant pas une copie du tableau? Je ne suis pas tout à fait ce que tu veux dire. – TheDarkIn1978

+0

@ TheDarkIn1978. Sûr. Si vous appelez la fonction sans paramètre (ou null) 'colorsArray' sera une référence à' DEFAULT_COLORS'. C'est à dire. cela donnera accès au même objet. Ensuite, si à un certain moment dans votre fonction vous faites quelque chose comme 'colorsArray [0] = 0xffcc99;' ou 'colorsArray.splice (0,1);' ou quoi que ce soit qui modifie 'colorsArray', vous allez changer le contenu de' DEFAULT_COLORS', probablement sans intention de le faire. Ceci est dû au fait que colorsArray sera une référence au même objet que les références const 'DEFAULT_COLORS'. Faire une copie, cela ne peut pas arriver. –

Questions connexes