F#如何从清单中获得某人的价值

时间:2018-10-28 03:07:41

标签: f#

我有一个选项列表,例如[Some 1;一些2]。我的目的是在不使用模式匹配和options.get函数的情况下获取Some元素的值。

我有一个testfunction,它返回('a->'b)选项->'a选项->'b选项。 为了实现我的目标,我该如何使用此功能?

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

1 个答案:

答案 0 :(得分:1)

您可以使用Some函数来获取List.choose元素的值,该函数几乎可以做到这一点。

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

List.choose函数的语义是它允许您通过提供一个函数来选择列表中的某些元素,该函数为每个元素返回SomeNone。函数将为其返回None的元素将被丢弃,并且Some的结果将被展开并以列表形式返回。您可以将这个功能视为mapfilter的组合。

由于列表中的元素已经是option类型,因此您的选择函数将是id,这是一个标准库函数,只需简单地返回其参数即可。