F# 类型

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

F# 类型摘要

某些类型被视为基元类型,例如布尔类型 bool 以及各种大小的整型和浮点类型,其中包括字节和字符类型。 基元类型中介绍了这些类型。

语言内置的其他类型包括元组、列表、数组、序列、记录和可区分联合。 如果你有使用其他 .NET 语言的经验,并且正在学习 F#,则应阅读其中每种类型的相应主题。 这些特定于 F# 的类型支持函数编程语言通用的编程样式。 其中许多类型在 F# 库中具有关联的模块,这些模块支持对这些类型执行常见操作。

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

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

此外,F# 代码可以定义别名(称为类型缩写),它们是类型的替代名称。 当类型将来可能发生变化,并且你希望避免更改依赖于类型的代码时,可以使用类型缩写。 或者,可以使用类型缩写作为类型的友好名称,使代码更易阅读和理解。

F# 提供了一些有用的集合类型,这些类型在设计时就考虑到了函数编程。 使用这些集合类型可帮助你编写样式上更具功能性的代码。 有关详细信息,请参阅 F# 集合类型

类型语法

在 F# 代码中,通常必须写出类型的名称。 每种类型都有一种语法形式,你可以在类型注释、抽象方法声明、委托声明、签名和其他构造中使用这些语法形式。 每当你在解释器中声明一个新的程序构造时,解释器都会打印该构造的名称及其类型的语法。 此语法可能就是用户定义类型的标识符或内置标识符(例如 intstring 的标识符),但对于更复杂的类型,语法也更复杂。

下表显示了 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
array type-name[] 或

type-name array
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 采用 intfloat 并返回 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>
主题 说明
基元类型 描述内置简单类型,如整型类型、布尔类型和字符类型。
unit 类型 描述 unit 类型,该类型具有一个值并由 () 指示;相当于 C# 中的 void 和 Visual Basic 中的 Nothing
元组 描述元组类型,该类型包括以对、三元组、四元组等分组的任何类型的关联值。
选项 描述选项类型,该类型可能有值,也可能为空。
列表 描述列表,列表是一系列相同类型的、有序的不可变元素。
数组 描述数组,数组是一组相同类型的、有序的可变元素,这些元素占用连续的内存块并且大小固定。
序列 描述序列类型,该类型表示一系列逻辑值;仅在必要时计算单个值。
记录 描述记录类型,即,命名值的小型聚合。
可区分联合 描述可区分联合类型,该类型的值可以是一组可能类型中的任何一种。
函数 描述函数值。
描述类类型,一种对应于 .NET 引用类型的对象类型。 类类型可以包含成员、属性、实现的接口和基类型。
结构 描述 struct 类型,一种对应于 .NET 值类型的对象类型。 struct 类型通常表示数据的小型聚合。
接口 描述接口类型,这些类型表示一组提供特定功能但不包含数据的成员。 接口类型必须由对象类型实现才有用。
委托 描述委托类型,该类型将函数表示为对象。
枚举 描述枚举类型,其值属于一组命名值。
属性 描述属性,用于指定另一种类型的元数据。
异常类型 描述指定错误信息的异常。