42

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

4

3 回答 3

51

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()
于 2009-01-16T12:56:15.020 回答
8

可以查看F# 中的区分联合,以获取有关 DU 的更多信息,特别是选项类型(一些,无)。正如前面的回答所说, Some 只是 option<'a> 类型的联合情况,这是代数数据类型的一个特别常见/有用的例子。

于 2009-01-16T13:48:03.807 回答
7

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

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

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

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

使用模式匹配逻辑,如果值为 null 或在 F# 语法中,匹配我们需要类似的方式来执行某些代码,None

因此我们将有相同的代码

match x with 
  | None -> do ...
  | Some x -> do ... 
于 2017-08-11T19:20:46.920 回答