一个'一个选项

时间:2016-05-21 09:52:21

标签: f#

我有一个功能

foo 'a -> 'b option

我有一个' a

的数组
let data_in: 'a[] = ...

我需要获得' b的数组。所以我有两个问题:

  1. 我想做这样的事情:

    bar(data: 'a []) : 'b [] = 
      data |> foo
    
    let result : 'b[] = Array.filter (fun e -> 
                                         match e with
                                         | Some(e) -> true
                                         | None -> false)
    
  2. 但我收到bar预期类型'b的错误,但获得'b option。如何修复bar中的类型声明?

    1. 可能有一种方法可以在没有map + filter一个表达式的情况下完成所有这些操作吗?

1 个答案:

答案 0 :(得分:5)

Array.choose可以一次性映射+过滤。

这可能是解决您问题的最简单方法。