我有一个选项列表,例如[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
答案 0 :(得分:1)
您可以使用Some
函数来获取List.choose
元素的值,该函数几乎可以做到这一点。
[Some 1; Some 2] |> List.choose id
// Returns [1; 2]
List.choose
函数的语义是它允许您通过提供一个函数来选择列表中的某些元素,该函数为每个元素返回Some
或None
。函数将为其返回None
的元素将被丢弃,并且Some
的结果将被展开并以列表形式返回。您可以将这个功能视为map
和filter
的组合。
由于列表中的元素已经是option
类型,因此您的选择函数将是id
,这是一个标准库函数,只需简单地返回其参数即可。