F# 类型

本主题介绍 F# 中使用的类型以及如何命名和描述 F# 类型。

F# 类型的摘要

一些类型是基元类型,例如布尔类型 bool 和各种大小的整型和浮点型(包括字节和字符的类型)。 基元类型 (F#) 中对这些类型进行了介绍。

还有其他一些内置到语言中的类型,包括元组、列表、数组、序列、记录和可区分联合。 如果您使用过其他 .NET 语言,并且现在正在学习 F#,则应阅读有关上述每个类型的主题。 本主题的相关主题一节中包含了指向有关这些类型的更多信息的链接。 这些 F# 专用的类型支持函数编程语言通用的编程样式。 其中的许多类型在 F# 库中具有关联的模块,这些模块可支持对这些类型的常见操作。

函数的类型包含有关参数类型和返回类型的信息。

.NET Framework 是对象类型、接口类型、委托类型和其他类型的源。 您可以像在任何其他 .NET 语言中一样定义自己的对象类型。

此外,F# 代码可以定义称作“类型缩写”的别名。别名是类型的替代名称。 如果类型将来可能会更改,并且您希望避免更改与类型相关的代码,则可以使用类型缩写。 或者,您可以将类型缩写用作类型的友好名称,这样可以使代码更易于阅读和理解。

F# 提供了有用的集合类型与函数编程记住而设计的。 使用这些集合类型,可帮助您编写功能更强,在样式中的代码。 有关更多信息,请参见 F# 集合类型

类型的语法

在 F# 代码中,您通常必须写出类型的名称。 每个类型都具有一个语法形式,您可以在类型批注、抽象方法声明、委托声明、签名和其他构造中使用这些语法形式。 只要您在解释器中声明新的程序构造,解释器就会输出该构造的名称以及该构造的类型的语法。 此语法可能只是用户定义的类型的标识符,或者是 int 或 string 等的内置标识符,但类型越复杂,相应的语法就会越复杂。

下表显示了 F# 类型的类型语法的各个方面。

类型

类型语法

示例

基元类型

type-name

int

float

string

聚合类型(类、结构、联合、记录、枚举等)

type-name

System.DateTime

Color

类型缩写

type-abbreviation-name

bigint

完全限定类型

namespaces.type-name

modules.type-name

namespaces.modules.type-name

System.IO.StreamWriter

数组

type-name[] 或

type-name 数组

int[]

array<int>

int array

二维数组

type-name[,]

int[,]

float[,]

三维数组

type-name[,,]

float[,,]

Tuple — 元组

type-name1 * type-name2 ...

例如,(1,'b',3) 具有类型 int * char * int

Generic Type — 泛型类型

type-parameter generic-type-name

generic-type-name<type-parameter-list>

'a list

list<'a>

Dictionary<'key, 'value>

构造的类型(提供了特定类型参数的泛型类型)

type-argument generic-type-name

generic-type-name<type-argument-list>

int option

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>

具有单个参数的函数类型

parameter-type1 -> return-type

一个采用 int 并返回 string 的函数的类型为 int -> string

具有多个参数的函数类型

parameter-type1 -> parameter-type2 -> ... -> return-type

一个采用 int 和 float 作为参数并返回 string 的函数具有类型 int -> float -> string

作为参数的高阶函数

(function-type)

List.map 具有类型 ('a -> 'b) -> 'a list -> 'b list

Delegate — 委托

function-type 的委托

delegate of unit -> int

可变类型

#type-name

#System.Windows.Forms.Control

#seq<int>

相关主题

主题

说明

基元类型 (F#)

介绍内置的简单类型,如整型、布尔类型和字符类型。

unit 类型 (F#)

介绍 unit 类型,该类型包含一个值并由 () 指示;它等效于 C# 中的 void 和 Visual Basic 中的 Nothing。

元组 (F#)

介绍元组类型,该类型由按二重、三重、四重等分组的任何类型的关联值构成。

选项 (F#)

介绍选项类型,该类型可能具有一个值,也可能为空。

列表 (F#)

介绍列表,它是有序的、不可变的同类型元素的序列。

数组 (F#)

介绍数组,它是同一类型的可变元素的有序集,这些元素占用连续内存块并具有固定大小。

序列 (F#)

介绍序列类型,该类型表示值的逻辑序列;仅在必要时才计算各个值。

记录 (F#)

介绍记录类型,该类型是一个小型的命名值聚合。

可区分联合 (F#)

介绍可区分联合类型,该类型的值可以是一组可能的类型中的任一类型。

函数 (F#)

介绍函数值。

类 (F#)

介绍类类型,该类型是一个与 .NET 引用类型相对应的对象类型。 类类型可以包含成员、属性、已实现的接口和基类型。

结构 (F#)

介绍 struct 类型,该类型是一个与 .NET 值类型相对应的对象类型。 struct 类型通常表示一个小型的数据聚合。

接口 (F#)

介绍接口类型,该类型表示一组提供特定功能但不包含数据的成员。 一个接口类型必须由一个对象类型实现才有用。

委托 (F#)

介绍委托类型,该类型将函数表示为对象。

枚举 (F#)

介绍枚举类型,该类型的值属于一组命名值。

特性 (F#)

介绍可用于指定另一个类型的元数据的特性。

异常类型 (F#)

介绍可用于指定错误信息的异常。