我们将使用F# 库中的两个操作,因此,首先要看一下如何使用;然后,讨论如何实现,以及如何在 C# 中使用。我们已经知道,了解 F# 中函数的功能,最好的方法通常是理解类型签名。现在,我们就看一下 Option.map 的类型签名:
> Option.map;;
val it : ((‘a -> ‘b) -> ‘a option-> ‘b option) = (...)
映射(map)操作通常把给定函数应用到由数据类型所包含的值,以相同的结构包装结果。对于选项(option)类型,当值是 Some 时,给定的函数作为第一个参数值(‘a –> ‘b),将应用到由第二个参数值(‘a option)所包含的值;类型 ‘b 的结果将包装在选项类型内,因此,整体结果的类型是 ‘ b option;如果原始选项类型不包含值,映射函数将返回 None。
我们可以使用这个函数代替嵌套的匹配。读取第二个输入时,我们要“映射”所包含的值到新的值中,并与第一个数相加:
match (readInput()) with
| None -> None
| Some(first) -> readInput() |>Option.map (fun second -> first + second)
在第三行,我们已经有了用户输入的第一个数字;接着,使用 readInput() 从控制台读取第二个选项值,我们使用 Option.map,把这个值映射到新的选项值,然后,作为结果返回。Lambda 函数作为参数值使用,把第一个值与选项值所包含的数相加(如果有的话)。
时间: 2024-10-25 16:20:46