F# - 选项

当可能存在或不存在变量或函数的值时,F#中的选项类型用于计算.选项类型用于表示计算中的可选值.他们可以有两个可能的值和减去; 一些(x).

例如,执行除法的函数将在正常情况下返回一个值,但是在零分母的情况下抛出异常.在此处使用选项将有助于指示函数是成功还是失败.

选项具有基础类型,可以保存该类型的值,或者它可能没有值./p>

使用选项


让我们举一个除法函数的例子.下面的程序解释了这个 :

让我们编写一个函数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.

以下示例演示使用选项 :

示例

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一个静态属性,使您可以创建具有无值的选项值.
IsNonebool返回 true 如果该选项具有值.
IsSomebool如果选项的值不是无,则返回 true .
Some'T option一个静态成员,它创建一个值不是的选项.
Value'T返回基础值,如果值无.

示例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

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

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