10
votes

Pourquoi ce javascript étiqueté continue pas de ne pas fonctionner?

J'utilise ce code pour méfier certains cercles se chevauchent:

iCantThinkOfAGoodLabelName:
x = genX(radius);
y = genY(radius);
for(i in circles) {
  var thisCircle = circles[i];
  if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) { //No overlap
    continue;
  } else { //Overlap
    continue iCantThinkOfAGoodLabelName; //<- Line 256
  }
  thisCircle = [];
}


1 commentaires

Avez-vous essayé break au lieu de Continuer ? Peut-être que continuer ne peut sauter à une étiquette qui se trouve sur une instruction de boucle.


4 Réponses :


12
votes

L'étiquette doit venir immédiatement avant la boucle

x = genX(radius);
y = genY(radius);

iCantThinkOfAGoodLabelName:
for(i in circles) {


3 commentaires

Dans ce cas, toute suggestion que je pourrais alors générer les valeurs X et Y seraient très utiles


Edité - Il n'y a aucune raison pour ne pas les générer avant l'étiquette. La présence de l'étiquette n'affecte aucune manière ces lignes.


Une raison pour laquelle cela ne fonctionnerait pas? J'ai suivi les instructions, mais je reçois juste la même erreur.



3
votes

Il ne devrait pas y avoir de déclaration entre un nom d'étiquette et une boucle associée.

x = genX(radius);
y = genY(radius);
iCantThinkOfAGoodLabelName:
    for(i in circles) {


0 commentaires

7
votes

parce que icantthinkofagoodlabelname: code> doit être juste avant la boucle.

function iCantThinkOfAGoodFunctionName() {
    var x = genX(radius),
        y = genY(radius);

    for (i in circles) {
        var thisCircle = circles[i];
        if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) { //No overlap
            continue;
        } else { //Overlap
            iCantThinkOfAGoodFunctionName();
        }
        thisCircle = [];
    }
}


0 commentaires

1
votes

J'ai récemment eu ce problème et je l'ai résolu en utilisant tous les minuscules dans l'étiquette de la boucle dans la version v0.8.x code> de nœud.js.

Utilisation de Nom de label: Code> vs. code> iCantthinkofagoodLabelName: code> pourrait vous aider. p>

D'autres vous ont correctement corrigé sur l'emplacement de l'étiquette. Il devrait être immédiatement avant le pour code> boucle. P>

Le Réseau de développeurs Mozilla sur les étiquettes conseille d'éviter d'utiliser des étiquettes, et préférez plutôt Fonctions d'appel ou Jeter une erreur. Vous pouvez repenser votre stratégie sur les utiliser si possible. P>

exemple d'appeler une fonction en fonction du résultat: P>

var i, j;

for (i = 0; i < 3; i++) {
   for (j = 0; j < 3; j++) {   
      if (i == 1 && j == 1) {
         // we want to ignore and continue
      } else {
         // do work with these variables from inside the doWork function
         // (scoped to whatever scope `this` for loop is in)
         doWork.call(this, i, j); 
      }
   }
}


0 commentaires