Вытащил один дискриминируемый случай объединения в F #? - PullRequest
0 голосов
/ 17 декабря 2018

Предположим, у меня есть DU вроде:

type Fruit = 
| Apple of string * bool
| Banana of string
| Cherry of string

Затем у меня есть такая коллекция:

fruits : Fruit list

Я хочу вытащить все экземпляры Apple для выполнениянекоторые вычисления:

// apples is Seq<string * bool> 
let apples = 
  fruits
  |> Seq.choose (fun x -> 
    match x with 
    | Apple a -> Some a
    | _ -> None
  )

Мой вопрос: Есть ли более краткий способ написать это?

Что-то вроде:

// Not real code
let apples = 
  fruits
  |> Seq.match Apple

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Не очень на самом деле.Это так кратко, как вы можете получить:

let apples = 
  fruits
  |> Seq.choose (function Apple(a,b) -> Some(a,b) |_-> None)
0 голосов
/ 17 декабря 2018

Чуть более кратко возможно;вам не нужно использовать Seq.choose:

let apples = fruits |> List.filter (fun fruit -> match fruit with Apple _ -> true | _ -> false)

Если вам это нужно в других местах, извлеките лямбду в вспомогательную функцию

let isApple = function | Apple _ -> true | _ -> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...