Skip to content

31-Option 类型

前言

Option 可以理解为是为我们常用的数据类型进行包装,包装的结果有两个:

  1. 有值 Some
  2. 没有值 None

Option 类型使用 enum 定义,它包含两个构造器:SomeNone。其中,Some 会携带一个参数,表示有值,None 不带

参数,表示无值。当需要表示某个类型可能有值,也可能没有值的时候,可选择使用 Option 类型。

示例

Option 类型被定义为一个泛型 enum 类型,

javascript
enum Option<T> {
    | Some(T)
    | None
}

下面的例子展示了如何定义 Option 类型的变量:

javascript
let a: Option<Int64> = Some(100)
let b: ?Int64 = Some(100)
let c: Option<String> = Some("Hello")
let d: ?String = None

编译器会用 Option<T> 类型的 Some 构造器将 T 类型的值封装成 Option<T> 类型的值(注意:这里并不是类型转换)。例如,下面的定义是合法的(等价于上例中变量 abc 的定义):

javascript
let a: Option<Int64> = 100
let b: ?Int64 = 100
let c: Option<String> = "100"

在上下文没有明确的类型要求时,无法使用 None 直接构造出想要的类型,此时应使用 None<T> 这样的语法来构造 Option<T> 类型的数据,例如

javascript
let a = None<Int64> // a: Option<Int64>
let b = None<Bool> // b: Option<Bool>

Released under the MIT License.