一个选项的数组

dem*_*mas 1 f#

我有一个功能

foo 'a -> 'b option
Run Code Online (Sandbox Code Playgroud)

我有一个'a

let data_in: 'a[] = ...
Run Code Online (Sandbox Code Playgroud)

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

  1. 我想做这样的事情:

    bar(data: 'a []) : 'b [] = 
      data |> foo
    
    let result : 'b[] = Array.filter (fun e -> 
                                         match e with
                                         | Some(e) -> true
                                         | None -> false)
    
    Run Code Online (Sandbox Code Playgroud)

但我得到了bar预期类型的错误'b,但得到了'b option.如何修复类型声明bar

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

Joh*_*mer 5

Array.choose 一次性映射+过滤.

它可能是解决您问题的最简单方法.