【问题标题】:F# How to get value of Some from a listF#如何从列表中获取一些值
【发布时间】:2019-04-01 08:32:04
【问题描述】:

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

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

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

【问题讨论】:

标签: f#


【解决方案1】:

您可以使用List.choose 函数获取Some 元素的值,这几乎完全一样。

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

List.choose 函数的语义是,它允许您通过提供一个函数来选择列表中的一些元素,该函数对于每个元素都返回 SomeNone。函数返回None 的元素被丢弃,Some 结果被解包并作为列表返回。您可以将此功能视为mapfilter 的组合。

因为列表中的元素已经是 option 类型,所以您选择的函数将是 id,这是一个标准库函数,它只是简单地返回其参数不变。

【讨论】:

  • 我可以用 List.foldback 实现吗?
  • @BDermier 您可以通过折叠实现任何目标。但是折叠函数需要包含模式匹配,OP 出于某种原因不想这样做。
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 2022-01-23
  • 2021-02-25
  • 2019-02-05
  • 2014-07-07
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多