F#keyword'Some'

36 f# keyword

F#的关键字" 有些 " -这是什么意思?

Meh*_*ari 47

Some不是关键字.option然而,有一种类型,它是一个包含两件事的歧视联盟:

  1. Some 它包含某种类型的值.
  2. None 这代表缺乏价值.

它被定义为:

type 'a option =
    | None
    | Some of 'a
Run Code Online (Sandbox Code Playgroud)

它有点像可空类型,你想拥有一个可以保存某种类型的值或根本没有值的对象.

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


Bri*_*ian 7

可以查看F#中的Discriminated Unions,了解有关DU的更多信息,特别是选项类型(Some,None).正如之前的回答所说,Some只是一个选项<'a>类型的联合案例,它是代数数据类型的一个特别常见/有用的例子.


小智 6

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

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

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

if (isNull(x)) {
   do ...  
} else {         //x exists
   do ...  
}
Run Code Online (Sandbox Code Playgroud)

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

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

match x with 
  | None -> do ...
  | Some x -> do ... 
Run Code Online (Sandbox Code Playgroud)