咄?帮助f#选项类型

Gee*_*Gee 1 f#

我正在冻结f#的选项类型.我有3本书,尽我所能,但我没有得到它们.

有人有一个清晰简洁的解释,也许是一个现实世界的例子吗?

TIA

加里

Tom*_*cek 5

布莱恩的答案被评为option类型的最佳解释,所以你应该读它:-).我将尝试使用一个简单的F#示例写一个更简洁的解释......

假设您有一个产品数据库,并且您需要一个搜索数据库并返回具有指定名称的产品的函数.当没有这样的产品时,该功能应该做什么?使用时null,代码可能如下所示:

Product p = GetProduct(name);
if (p != null) 
  Console.WriteLine(p.Description);
Run Code Online (Sandbox Code Playgroud)

此方法的一个问题是您不必执行检查,因此您可以轻松编写将在未找到产品时引发意外异常的代码:

Product p = GetProduct(name);
Console.WriteLine(p.Description);
Run Code Online (Sandbox Code Playgroud)

使用option类型时,您可能会明确缺少值.在F#中定义的类型不能有null值,当你想编写一个可能返回值或不返回值的函数时,你不能返回Product- 而是你需要返回option<Product>,所以上面的代码看起来像这样(我添加了类型注释,所以你可以看到类型):

let (p:option<Product>) = GetProduct(name)
match p with
| Some prod -> Console.WriteLine(prod.Description)
| None -> () // No product  found
Run Code Online (Sandbox Code Playgroud)

您无法直接访问该Description属性,因为搜索的重用不是Product.要获得实际Product值,您需要使用模式匹配,这会强制您在缺少值时处理该情况.

摘要.总而言之,option类型的目的是使类型中的"缺失值"方面显式化,并强制您在每次使用可能缺失的值时检查值是否可用.