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