2012-06-28 5 views
3

Je souhaite utiliser une variable dans un boîtier de commutateur. à titre d'exemple, ne pouvait pas le faire. Pouvez-vous aider?case de commutateur avancé

switch(basket,pay){ 
    case true, true: 
     blah blah... 
    break; 
    case false,true: 
     blah blah.. 
    break; 
    case false, false: 
     blah blah... 
    break; 
} 
+0

Vous pouvez activer uniquement 1 valeur - panier ou payer (pas les deux) – Kane

Répondre

2

Ce que vous avez écrit est JavaScript, mais il ne répond pas à vos attentes.

Dans une expression, la virgule évalue le dernier membre. Ceci est couramment utilisé dans les boucles pour initialiser deux variables en même temps:

for(var i = 0, l = myArray.length; i < l; ++i) { 
    ... 
} 

Lorsque vous utilisez l'opérateur virgule dans vos commutateurs et des déclarations de cas, la première valeur est mis au rebut et la dernière valeur est utilisée. Voir ce violon pour un exemple: http://jsfiddle.net/UG4vf/

Il est pas comparer les deux valeurs et de trouver le cas qui correspond à deux. En d'autres termes, votre code ci-dessus se réduit à ceci:

switch(pay){ 
    case true: 
     blah blah... 
    break; 
    case true: 
     blah blah.. 
    break; 
    case false: 
     blah blah... 
    break; 
} 
2

Votre instruction switch ne semble pas nécessaire, pour être entièrement honnête. Vous devriez être ok avec quelques if simples « s:

if (basket && pay) { 
    // code 
} else if (pay) { 
    // code 
} else { 
    // code 
} 
+0

+1 en fonction de ce qu'ils ont fourni comme exemple, c'est la réponse la plus appropriée (et la plus facile à lire). – JonWarnerNet

6

Qu'est-ce que vous cherchez est flags and bitmasks. Fondamentalement, vous stockez les valeurs pseudo-booléennes myltiple insdie la même variable et vous pouvez accéder à leur condition composée. La beauté de ceci est que vous pouvez combiner plusieurs propriétés en une seule variable. Cela est particulièrement soignée quand il y a beaucoup plus de biens booléens que vous devez garder une trace de

var FLAG_BASKET = 0x1; // 0001 
var FLAG_PAY = 0x2; // 0010 

//set them both to pseudo-true 
var flags = FLAG_BASKET | FLAG_PAY; 

switch (flags){ 
    case 0x0://both are false 
    case 0x1://basket is true, pay is false 
    case 0x2://basket is false, pay is true 
    case 0x3://both are true 
} 

Fiddled

+0

J'aime cette réponse. Cela ouvre l'esprit pour des idées simples – Marecky

0

le problème d'origine peut être écrit avec switch:

switch (true) { 
    case basket && pay: 
    // both true 
    break; 
    case basket && !pay: 
    // basket true, pay false 
    break; 
    case !basket && pay: 
    // basket false, pay true 
    break; 
    case !basket && !pay: 
    // basket false, pay false 
    break; 
}