2010-05-10 15 views
5

¿Cómo se codifica una función que toma un bloque de código como un parámetro que contiene sentencias de casos? Por ejemplo, en mi bloque de código, no quiero hacer una coincidencia o un caso predeterminado de forma explícita. Estoy buscando algo como esto¿Cómo se codifica un bloque de código de coincidencia de patrón en scala?

myApi { 
    case Whatever() => // code for case 1 
    case SomethingElse() => // code for case 2 
} 

Y dentro de mi myApi(), que en realidad va a ejecutar el bloque de código y hago los partidos.

Respuesta

6

usted tiene que utilizar un PartialFunction para esto.

scala> def patternMatchWithPartialFunction(x: Any)(f: PartialFunction[Any, Unit]) = f(x) 
patternMatchWithPartialFunction: (x: Any)(f: PartialFunction[Any,Unit])Unit 

scala> patternMatchWithPartialFunction("hello") { 
    | case s: String => println("Found a string with value: " + s) 
    | case _ => println("Found something else") 
    | } 
Found a string with value: hello 

scala> patternMatchWithPartialFunction(42) { 
    | case s: String => println("Found a string with value: " + s) 
    | case _ => println("Found something else") 
    | } 
Found something else 
+0

Gracias! Sabía que era algo raro, pero no pude encontrar un ejemplo de esto. – egervari

+0

@egervari el mismo patrón también se aplica a 'Function1'. Los bloques con sentencias 'case' son literales de función, y pueden representar tanto' PartialFunction' como 'Function1', según cuál sea el tipo esperado. –

-1

Esto debería ser suficiente para explicarlo: A Tour of Scala: Pattern Matching

+0

no, sé cómo perfil de compatibilidad ... Quiero hacer una función que toma en un bloque de código que sólo consisten en declaraciones de casos ... y luego tener ese proceso función de la coincidencia internamente. Básicamente, para los bloques de código normales, tenemos un parámetro con (=> Unidad), pero es diferente para la coincidencia de patrones. En esencia, quiero hacer lo mismo para los bloques de código regulares, pero para las declaraciones de casos. – egervari

Cuestiones relacionadas