gpt4 book ai didi

F# 这是 Option.map 中的错误吗

转载 作者:行者123 更新时间:2023-12-04 23:42:38 24 4
gpt4 key购买 nike

鉴于以下代码:

let mapOption (f : ('a -> 'b)) (x : 'a option) =
match x with
| Some x -> Some(f(x))
| None -> None

let mapOptions (f : ('a -> 'b)) (xs : 'a option list) : 'b option list =
xs
|> List.map (fun (x : 'a option) -> mapOption f x)

let myList = [None; Some 1; Some 2; None]

let a = myList |> mapOptions (fun x -> x + 2)

let b = myList |> List.map(fun x-> x |> Option.map(fun y -> y + 2))

为什么 a 和 b 的结果等于:
[null; Some 3; Some 4; null]val it : int option list = [null; Some 3; Some 4; null]
不应该是:
[None; Some 3; Some 4; None]

最佳答案

Nonenull 表示在 CLR 中。您可以通过试验 FSI 看到这一点:

> [Some 3; None];;
val it : int option list = [Some 3; null]

不过它仍然有效:
> [Some 3; None] |> List.choose id;;
val it : int list = [3]

所以 [null; Some 3; Some 4; null][None; Some 3; Some 4; None] 相同:
> a = [None; Some 3; Some 4; None];;
val it : bool = true

哪里 a是来自 OP 的值。

关于F# 这是 Option.map 中的错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com