Załóżmy, że mają następujące oznaczenia:Używanie niekompletnego dopasowywania wzorca jako filtra?
type Vehicle =
| Car of string * int
| Bike of string
let xs = [ Car("family", 8); Bike("racing"); Car("sports", 2); Bike("chopper") ]
można filtrować powyżej listy za niepełny dopasowanie wzorca w imperatywem pętli jak:
> for Car(kind, _) in xs do
> printfn "found %s" kind;;
found family
found sports
val it : unit =()
ale spowoduje to: 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.
Jako że ignorowanie niedopasowanych elementów jest moją intencją, czy istnieje możliwość pozbycia się tego ostrzeżenia?
Czy istnieje sposób, aby to działało ze zrozumieniem listy bez powodowania wyjątku MatchFailureException? na przykład coś takiego:
> [for Car(_, seats) in xs -> seats] |> List.sum;;
val it : int = 10
Myślę, że linia miała wyglądać następująco: [dla Bus (_, miejsc) w xs -> miejsc] |> List.sum ;; Dobrze? ;) –
Och, rozumiem! 2 samochody! 5 x 2 = 10! Panie, pomóż mi. –
To samochód rodzinny i samochód sportowy, więc 8 + 2 = 10. – Laurent