2011-07-24 4 views
14

J'ai une déclaration que je veux exprimer, que pseudo-code C ressemblerait à ceci:Scala - modèle conditionnel complexe assortit

switch(foo): 
    case(1) 
     if(x > y) { 
      if (z == true) 
       doSomething() 
      } 
      else { 
       doSomethingElse() 
      } 
     return doSomethingElseEntirely() 

    case(2) 
     essentially more of the same 

est une belle façon possible avec la syntaxe de correspondance de motif de scala?

Répondre

37

Si vous voulez gérer plusieurs conditions dans une seule instruction match, vous pouvez également utiliser gardes qui vous permettent de spécifier des conditions supplémentaires pour un cas:

foo match {  
    case 1 if x > y && z => doSomething() 
    case 1 if x > y => doSomethingElse() 
    case 1 => doSomethingElseEntirely() 
    case 2 => ... 
} 
+0

Ahh, ne pense pas d'avoir plusieurs cas 1. Ça marche. –

+5

Cela ne correspond pas réellement à ce que l'OP a écrit. Le flux de contrôle est différent. sur 'x> y && z', l'OP exécute' doSomething() ',' return doSomethingElseEntirely() ', alors que yours renvoie' doSomething() 'seul. –

+0

@Rex - Bon point, merci. Je ne l'ai pas tout à fait compris parce que le code d'OP manque des accolades ouvrantes et fermantes. Quoi qu'il en soit, il devrait être facile de réparer le corps en conséquence. –