2011-07-24 15 views
14

Mam oświadczenie chcę wyrazić, że w C pseudo-kod wyglądałby następująco:Scala - kompleks warunkowe wzorzec dopasowania

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

    case(2) 
     essentially more of the same 

Czy to dobry sposób możliwe ze składnią dopasowywania scala wzór?

Odpowiedz

37

Jeśli chcesz obsługiwać wiele warunków w jednym match oświadczeniu, można również użyć strażników które pozwalają określić dodatkowe warunki dla przypadku:

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

Ahh, nie myśleć o konieczności kilka sprawa 1. To działa. –

+5

To w rzeczywistości nie pasuje do tego, co napisał OP. Przepływ sterowania jest inny; na 'x> y && z', OP wykonuje' doSomething() ',' return doSomethingElseEntirely() ', podczas gdy twoja zwraca' doSomething() 'sam. –

+0

@Rex - Dobra uwaga, dzięki. Nie całkiem to dostałem, ponieważ w kodzie OP brakuje niektórych otwieranych i zamykanych nawiasów klamrowych. W każdym razie, powinno być łatwo naprawić ciało odpowiednio. –

Powiązane problemy