- F# 基础教程
- F# - 首页
- F# - 概述
- F# - 环境搭建
- F# - 程序结构
- F# - 基本语法
- F# - 数据类型
- F# - 变量
- F# - 运算符
- F# - 决策
- F# - 循环
- F# - 函数
- F# - 字符串
- F# - 可选项
- F# - 元组
- F# - 记录
- F# - 列表
- F# - 序列
- F# - 集合
- F# - 映射
- F# - 辨析联合
- F# - 可变数据
- F# - 数组
- F# - 可变列表
- F# - 可变字典
- F# - 基本输入/输出
- F# - 泛型
- F# - 委托
- F# - 枚举
- F# - 模式匹配
- F# - 异常处理
- F# - 类
- F# - 结构体
- F# - 运算符重载
- F# - 继承
- F# - 接口
- F# - 事件
- F# - 模块
- F# - 命名空间
F# - 可选项
F# 中的可选项类型用于计算中变量或函数的值可能存在也可能不存在的情况。可选项类型用于表示计算中的可选值。它们可以有两个可能的值 - 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 (value),在操作失败时返回 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 | 一个静态属性,使您可以创建一个具有None 值的可选项值。 |
| IsNone | bool | 如果可选项具有None值,则返回true。 |
| IsSome | bool | 如果可选项的值不是None,则返回true。 |
| Some | 'T option | 一个静态成员,创建一个具有非None值的可选项。 |
| Value | 'T | 返回底层值,如果值为None,则抛出 NullReferenceException。 |
示例 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
广告