在F#中'T和'U是什么意思?

时间:2013-06-20 05:59:47

标签: f#

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

很抱歉,如果这听起来过于简单,但谷歌搜索没有解释。

谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:3)

从规格:

形式'ident是一种变量类型。例如,以下是所有变量类型:

'a
'T
'Key

关于为什么'T而非'a

的问题
  

注意:此规范通常使用大写标识符,例如   'T或'用户声明的泛型类型参数和用途的键   用于编译器推断的泛型的小写标识符,例如'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'类型值 - 当然,这是地图的作用。