2010-02-23 7 views
7

He estado buscando un poco pero no puedo encontrar ningún ejemplo que demuestre el uso de @ _ * mientras coinciden las clases de casos de patrones.Buscando ejemplos de cómo usar "@ _ *" al hacer la coincidencia de patrones en Scala

A continuación se muestra un ejemplo del tipo de aplicación al que me refiero.

def findPerimeter(o: SomeObject): Perimeter = o match { 
case Type1(length, width) => 
    new Perimeter(0, 0, length, width) 
case Type2(radius) => 
    new Perimeter(0, 0, 2*radius, 2*radius) 
... 

case MixedTypes(group @_*) => { 
    \\How could @_* be used to check subpatterns of group? 
} 

}

Si alguien me podría mostrar algunos ejemplos o señalarme a una página web que tiene algunos ejemplos que sería grande.

Gracias

Respuesta

5

Recuerde que algo como

Type2(3.0) match { 
    case t2 @ Type2(radius) => //... 
} 

une radius al valor 3.0t2 y se une a la instancia de Tipo 2 se compara con.

Usando su ejemplo:

def findPerimeter(o: SomeObject): Perimeter = o match { 
    case Type1(length, width) => new Perimeter(0, 0, length, width) 
    case Type2(radius) => new Perimeter(0, 0, 2*radius, 2*radius) 
    // ... 
    // assume that Perimeter defines a + operator 
    case MixedTypes(group @ _*) => group.reduceLeft(findPerimeter(_) + findPerimeter(_)) 

} 

Aquí, group está ligado a la secuencia de SomeObject s que definen el MixedTypes. Puede tratar es como una secuencia de lo que sea-el-constructor-args-for-MixedTypes-is.

Cuestiones relacionadas