从可能列表中提取值

Extract values from a list of maybes

在 Elm 中,我有一个列表:

[ Just a, Nothing, Just b]

我想从中提取:

[a, b]

使用 List.map 和模式匹配不允许这样做,除非我错了,因为当列表中的值为 Nothing 时我不能 return nothing。 我怎样才能做到这一点?

如果你不想要任何额外的依赖,你可以使用List.filterMap with the identity函数:

List.filterMap identity [ Just a, Nothing, Just b ]

filterMap 看起来和工作起来很像 map,除了映射函数应该 return 一个 Maybe b 而不仅仅是一个 b,并且将展开并过滤掉任何 Nothings。因此,使用 identity 函数将有效地解包并过滤掉 Nothing,而无需实际进行任何映射。

或者,您可以使用 Maybe.Extra.values from elm-community/maybe-extra:

Maybe.Extra.values [ Just a, Nothing, Just b ]

通常在这种情况下,我会使用像这样的辅助函数:

extractMbVal =
    List.foldr
        (\mbVal acc ->
            case mbVal of
                Just val ->
                    val :: acc

                Nothing ->
                    acc
        )
        []