Options
优质
小牛编辑
130浏览
2023-12-01
当可能存在或不存在变量或函数的值时,F#中的option类型用于计算。 选项类型用于表示计算中的可选值。 它们可以有两个可能的值 - Some(x)或None 。
例如,执行除法的函数将在正常情况下返回值,但在零分母的情况下将抛出异常。 在此处使用选项将有助于指示功能是成功还是失败。
选项具有基础类型,可以保存该类型的值,也可以没有值。
使用选项
我们举一个除法函数的例子。 以下程序解释了这一点 -
让我们编写一个函数div,并向它发送两个参数20和5 -
let div x y = x/y
let res = div 20 5
printfn "Result: %d" res
编译并执行程序时,它会产生以下输出 -
Result: 4
如果第二个参数为零,则程序抛出异常 -
let div x y = x/y
let res = div 20 0
printfn "Result: %d" res
编译并执行程序时,它会产生以下输出 -
Unhandled Exception:
System.DivideByZeroException: Division by zero
在这种情况下,我们可以使用选项类型在操作成功时返回Some(值),如果操作失败则返回None。
以下示例演示了选项的使用 -
例子 (Example)
let div x y =
match y with
| 0 -> None
| _ -> Some(x/y)
let res : int option = div 20 4
printfn "Result: %A " res
编译并执行程序时,它会产生以下输出 -
Result: Some 5
选项属性和方法
选项类型支持以下属性和方法 -
财产或方法 | 类型 | 描述 |
---|---|---|
None | 'T option | 一个静态属性,使您可以创建具有None value的选项None value 。 |
IsNone | bool | 如果该选项具有None值,则返回true 。 |
IsSome | bool | 如果选项的值不是None ,则返回true 。 |
Some | 'T option | 一个静态成员,用于创建一个值为None的选项。 |
Value | 'T | 返回基础值,如果值为None ,则抛出NullReferenceException。 |
例子1 (Example 1)
let checkPositive (a : int) =
if a > 0 then
Some(a)
else
None
let res : int option = checkPositive(-31)
printfn "Result: %A " res
编译并执行程序时,它会产生以下输出 -
Result: <null>
例子2 (Example 2)
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
编译并执行程序时,它会产生以下输出 -
Result: Some 5
Result: 5
例子3 (Example 3)
let isHundred = function
| Some(100) -> true
| Some(_) | None -> false
printfn "%A" (isHundred (Some(45)))
printfn "%A" (isHundred (Some(100)))
printfn "%A" (isHundred None)
编译并执行程序时,它会产生以下输出 -
false
true
false