布莱恩的答案被评为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类型的目的是使类型中的"缺失值"方面显式化,并强制您在每次使用可能缺失的值时检查值是否可用.