当变量或函数的值可能不存在时,F#中的Options类型将用于计算,Options类型用于表示计算中的可选值,它们可以有两个可能的值- Some(x)或 None 。
以除法函数为例,以下程序对此进行了解释- 编写一个函数div,并向其发送两个参数20和5-
let div x y = x/y let res = div 20 5 printfn "Result: %d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
Result: 4
如果第二个参数为零,则程序将引发异常-
let div x y = x/y let res = div 20 0 printfn "Result: %d" res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
Unhandled Exception: System.DivideByZeroException: Division by zero
在这种情况下,可以使用Options类型在操作成功时返回Some(值),在操作失败时返回None。
以下示例演示了Options的使用-
let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
Result: Some 5
属性或方法 | 类型 | 说明 |
---|---|---|
None | 'Toptions | 一个静态属性,使您可以创建具有无值的Options值。 |
IsNone | bool | 如果Options具有 None 值,则返回 true 。 |
IsSome | bool | 如果Options的值不是 None ,则返回 true 。 |
Some | 'Toptions | 创建一个Options的静态成员,该Options的值不是 None 。 |
Value | 'T | 返回基础值,或者,如果该值为 None ,则抛出NullReferenceException。 |
let checkPositive (a : int) = if a > 0 then Some(a) else None let res : int option = checkPositive(-31) printfn "Result: %A " res
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
Result: <null>
let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res printfn "Result: %A " res.Value
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
Result: Some 5 Result: 5
let isHundred = function | Some(100) -> true | Some(_) | None -> false printfn "%A" (isHundred (Some(45))) printfn "%A" (isHundred (Some(100))) printfn "%A" (isHundred None)
编译并执行程序时,将产生以下输出-
链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-options.html
来源:LearnFk无涯教程网
false true false
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)