F # Как получить значение Some из списка - PullRequest
0 голосов
/ 28 октября 2018

У меня есть список опций, таких как [Некоторые 1;Некоторые 2].Моя цель - получить значения некоторых элементов без использования сопоставления с образцом и функций options.get.

У меня есть тестовая функция, которая возвращает ('a ->' b) option -> 'a option ->' bвариант.Чтобы достичь своей цели, как я могу использовать эту функцию?

let test xa xb = 
  match xa with
  | None -> None
  | Some el -> Option.map el xa

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете получить значения элементов Some с помощью функции List.choose, которая делает это почти точно.

[Some 1; Some 2] |> List.choose id
// Returns [1; 2]

Семантика функции List.choose заключается в том, что она позволяет вам выбиратьнекоторые элементы списка, предоставляя функцию, которая для каждого элемента возвращает либо Some, либо None.Элементы, для которых функция возвращает None, отбрасываются, а результаты Some развертываются и возвращаются в виде списка.Вы можете рассматривать эту функцию как комбинацию map и filter в одном.

Поскольку элементы вашего списка уже имеют тип option, функция выбора будет id,которая является стандартной библиотечной функцией, которая просто возвращает свой аргумент без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...