2010-07-25 14 views
0

J'ai un problème étrange concernant l'erreur Flash 1151: Un conflit existe avec la définition i dans l'espace de noms interne.Erreur Flash 1151 dans une boucle for

Voici le code problématique:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--) 
{ 
    dtYear.addItem({label:i, data:i}); 
} //for 

//-*-*-* Month 
for(var i:Number=0; i < months.length; i++) 
{ 
    dtMonth.addItem({label:i, data:i}); 
} //for 

Ou un exemple plus flagrant:

for(var i:Number=0; i < 12; i++) 
{ 
    trace(i); 
} //for 

//-*-*-* Month 
for(var i:Number=0; i < 12; i++) 
{ 
} //for 

Adobe donne une explication:

You cannot declare more than one variable with the same identifier name within the same scope unless all such variables are declared to be of the same type. In ActionScript 3.0, different code blocks (such as those used in two for loops in the same function definition) are considered to be in the same scope.

Qu'est-ce friggin est-ce ? Je veux dire que la variable i est tout le temps existe comme un nombre, typecasted comme un nombre, pourquoi diable le code ci-dessus échouerait alors?

Si je le modifie de cette façon, cela fonctionne, MAIS TRÈS LÉGÈRE ET POURQUOI EST-CE NÉCESSAIRE? AAARGGGHHHH ... Le développement Flash me rend fou. Donne-moi un pistolet :). Quelqu'un m'explique cela s'il vous plaît.

Code de travail:

for(var i:Number=dt.getFullYear(); i >= dt.getFullYear()-90; i--) 
{ 
    dtYear.addItem({label:i, data:i}); 
} //for 

//-*-*-* Month 
for(i=0; i < months.length; i++) 
{ 
    dtMonth.addItem({label:i, data:i}); 
} //for 

Répondre

3

Ceci est appelé levage variable en AS3 il n'y a aucune marge de la variable, le compilateur se déplace toutes les variables déclarées dans la partie supérieure de votre fonction, vous ne pouvez pas déclarer deux fois la même variable dans la même fonction.

Here la documentation sur l'utilisation de la variable et la déclaration pour des informations plus approfondies.

+0

Eh bien alors Flash/AS3 n'a jamais été une langue/interface utilisateur conviviale :). Quel comportement stupide: (((Merci. – Jauzsika

2

Réponse courte: vous ne pouvez pas déclarer deux fois "var i" dans la même fonction. Dans votre deuxième boucle, changez "i" en "j" et vous serez en or.