Я бы вообще не использовал решение, которое не обрабатывает все случаи сопоставления с образцом (например, при использовании fun (X str) -> ...
. Всегда полезно добавить обработчик, даже если он только что сообщил о более информативной ошибке ( например, случай был неожиданным, потому что он был отфильтрован ранее).
Вы можете расширить решение kvb, используя синтаксис function
(который похож на fun
с сопоставлением с шаблоном):
List.map (function (X s) -> s | _ -> failwith "Unexpected case")
В качестве альтернативы, если вы хотите игнорировать значения Y
(чтобы [X "a"; Y 1; X "b"]
становится ["a"; "b"]
), вы можете использовать функцию List.choose
:
List.choose (function (X s) -> Some s | _ -> None)
Чтобы написать это с использованием списочных представлений, вам нужно использовать полномасштабное сопоставление с шаблоном, используя match
, так что это будет немного дольше, чем при использовании функций более высокого порядка.