0 votes

Erreur flash 1151 dans une boucle for

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

Voici le code qui pose problème :

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 que c'est que ce bordel ? Je veux dire que la variable i existe tout le temps en tant que Nombre, tapée en tant que Nombre, pourquoi diable le code ci-dessus échouerait-il ?

Si je le modifie de cette façon, cela fonctionne, MAIS C'EST INUTILE ET POURQUOI A-T-ON BESOIN DE CELA ? AAARGGGHHHH... Le développement Flash me rend fou. Donnez-moi un pistolet :). Quelqu'un peut m'expliquer ce qu'il en est, 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

3voto

Patrick Points 12559

C'est ce que l'on appelle le "variable hoisting", en as3 il n'y a pas de portée pour la variable, le compilateur déplacera toutes les variables déclarées au sommet de votre fonction, vous ne pouvez donc pas déclarer deux fois la même variable dans la même fonction.

Ici la documentation sur l'utilisation et la déclaration des variables pour plus d'informations.

2voto

Myk Points 4083

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X