Предположим, у меня есть следующий код:
type Vehicle =
| Car of string * int
| Bike of string
let xs = [ Car("family", 8); Bike("racing"); Car("sports", 2); Bike("chopper") ]
Я могу отфильтровать приведенный выше список, используя неполное сопоставление с образцом в императивном цикле for, например:
> for Car(kind, _) in xs do
> printfn "found %s" kind;;
found family
found sports
val it : unit = ()
, но он будет вызвать предупреждение: FS0025: Неполный шаблон соответствует этому выражению. Например, значение «Велосипед (_)» может указывать на случай, не охваченный шаблоном (ами). Несовпадающие элементы будут проигнорированы.
Поскольку я намерен игнорировать несогласованные элементы, есть ли возможность избавиться от этого предупреждения?
И есть ли способ заставить эту работу работать со списком без исключения MatchFailureException ? например, что-то вроде этого:
> [for Car(_, seats) in xs -> seats] |> List.sum;;
val it : int = 10