F#泛型
泛型允许延迟类或方法中的编程元素的数据类型的规范,直到它在程序中实际使用。 换句话说,泛型允许你编写一个可以处理任何数据类型的类或方法。
您可以使用数据类型的替代参数来编写类或方法的规范。 当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理特定的数据类型。
在F#中,函数值,方法,属性和聚合类型(如类,记录和区别联合)可以是通用的。
通用结构包含至少一个类型参数。 通用函数和类型使您能够编写适用于各种类型的代码,而无需重复每种类型的代码。
您可以使用数据类型的替代参数来编写类或方法的规范。 当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理特定的数据类型。
在F#中,函数值,方法,属性和聚合类型(如类,记录和区别联合)可以是通用的。
通用结构包含至少一个类型参数。 通用函数和类型使您能够编写适用于各种类型的代码,而无需重复每种类型的代码。
语法
编写通用构造的语法如下
// Explicitly generic function. let function-name<type-parameters> parameter-list = function-body // Explicitly generic method. [ static ] member object-identifer.method-name<type-parameters> parameter-list [ return-type ] = method-body // Explicitly generic class, record, interface, structure, // or discriminated union. type type-name<type-parameters> type-definition
例子
(* Generic Function *) let printFunc (x: 'a) = do printfn "%A" x let gr = new genericClass<string>("zara") let gs = genericClass( seq { for i in 1 .. 10 -> (i, i*i) } )
当你编译和执行程序,它产生以下输出
"zara" seq [(1, 1); (2, 4); (3, 9); (4, 16); ...]