codecamp

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); ...]
F#基本I / O
F#代表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }