F# 关键字 'Some'

44

F#关键字'Some' - 它是什么意思?

3个回答

52

Some不是关键字。然而,有一个option类型,它是一个带有两个属性的判别联合:

  1. Some保存某种类型的值。
  2. None表示缺少值。

定义如下:

type 'a option =
    | None
    | Some of 'a

它有点像可空类型,您希望拥有一个可以保存某种类型的值或根本没有值的对象。

let stringRepresentationOfSomeObject (x : 'a option) =
    match x with
    | None -> "NONE!"
    | Some(t) -> t.ToString()

8

更多关于 F# 中的可区分联合类型和选项类型(Some, None)的信息,请查看F#中的可区分联合类型。正如先前的回答所述,Some只是选项<'a>类型的一种联合情况,它是代数数据类型的一个特别常见/有用的示例。


7

Some用于指定选项类型,或者说,可能存在也可能不存在的类型。

F#与大多数语言不同之处在于,控制流程主要通过模式匹配而非传统的if/else逻辑来完成。

在传统的if/else逻辑中,您可能会看到类似以下内容:

if (isNull(x)) {
   do ...  
} else {         //x exists
   do ...  
}

通过模式匹配逻辑,我们需要一种类似的方法来执行特定代码,以处理值为空的情况,或者在 F# 语法中,即 None

因此,我们将拥有与以下代码相同的代码:

match x with 
  | None -> do ...
  | Some x -> do ... 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接