2011-07-24 19 views
14

Tengo una declaración que quiero expresar, que en C pseudo-código se vería así:Scala - patrón condicional compleja emparejando

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

    case(2) 
     essentially more of the same 

es una bonita manera posible con la sintaxis de patrón de juego Scala?

Respuesta

37

Si desea manejar varias condiciones en una sola match comunicado, también se puede utilizar guardias que le permiten especificar las condiciones adicionales para un caso:

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

Ahh, no pensar en tener varios caso 1. Eso funciona. –

+5

Esto no coincide realmente con lo que escribió el OP. El flujo de control es diferente; en 'x> y && z', el OP ejecuta' doSomething() ',' return doSomethingElseEntirely() ', mientras que el suyo devuelve' doSomething() 'solo. –

+0

@Rex - Buen punto, gracias. No lo entendí porque al código de OP le faltan algunas llaves de apertura y cierre. De todos modos, debería ser fácil arreglar el cuerpo en consecuencia. –