2

例如在http://msdn.microsoft.com/en-us/library/ee370378.aspx示例List.map : ('T -> 'U) -> 'T list -> 'U list中。

对不起,如果这听起来很简单,但谷歌搜索它没有任何解释。

谢谢!

4

2 回答 2

5

在这种情况下'T'U是任意类型。

在其他情况下,可能会限制't使用约束。

有时,名称可能是描述性的,例如'key'value。在 F# 中,关键是'类型之前的 a 使其成为泛型。

类似地,类型可以以 a 为前缀,#它允许任何可以向上转换为给定类型的类型。

使用内联方法的更复杂的类型约束可以与^类型名称前的 a 一起使用,从而允许使用 .Net 类型系统无法实现的成员约束,并且仅适用于 F# 内联函数。

于 2013-06-20T06:02:18.577 回答
3

从规格:

'ident 形式的类型是变量类型。例如,以下都是变量类型:

'a
'T
'Key

对于您关于为什么'T和不的问题'a

注意:本规范通常对用户声明的泛型类型参数使用大写标识符,例如 'T 或 'Key,而对编译器推断的泛型参数使用小写标识符,例如 'a 或 'b。

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html

在这种情况下,这意味着List.map : ('T -> 'U) -> 'T list -> 'U list接受一个将'T类型值转换为类型的函数'U,一个'T类型值的列表并返回一个''U'类型值的列表——这当然是映射的作用。

于 2013-06-20T06:06:18.837 回答