Supongamos que tengo el siguiente código:¿Usar coincidencia de patrón incompleta como filtro?
type Vehicle =
| Car of string * int
| Bike of string
let xs = [ Car("family", 8); Bike("racing"); Car("sports", 2); Bike("chopper") ]
I puede filtrar por encima de lista mediante la coincidencia de patrones incompleta en un imperativo para bucle como:
> for Car(kind, _) in xs do
> printfn "found %s" kind;;
found family
found sports
val it : unit =()
pero causará un: warning FS0025: Incomplete pattern matches on this expression. For example, the value 'Bike (_)' may indicate a case not covered by the pattern(s). Unmatched elements will be ignored.
Como el ignorar elementos incomparables es mi intención, ¿hay alguna posibilidad de deshacerse de esta advertencia?
¿Y hay una manera de hacer que esto funcione con listas de comprensión sin causar una excepción MatchFailureException? p.ej. algo así:
> [for Car(_, seats) in xs -> seats] |> List.sum;;
val it : int = 10
Creo que esa línea se suponía que era: [para Bus (_, asientos) en xs -> asientos] |> List.sum ;; ¿Derecha? ;) –
¡Oh lo entiendo! 2 autos! 5 x 2 = 10! Señor ayudame. –
Es un automóvil familiar y deportivo, por lo que 8 + 2 = 10. – Laurent