例如在http://msdn.microsoft.com/en-us/library/ee370378.aspx示例List.map : ('T -> 'U) -> 'T list -> 'U list
中。
对不起,如果这听起来很简单,但谷歌搜索它没有任何解释。
谢谢!
例如在http://msdn.microsoft.com/en-us/library/ee370378.aspx示例List.map : ('T -> 'U) -> 'T list -> 'U list
中。
对不起,如果这听起来很简单,但谷歌搜索它没有任何解释。
谢谢!
在这种情况下'T
和'U
是任意类型。
在其他情况下,可能会限制't
使用约束。
有时,名称可能是描述性的,例如'key
或'value
。在 F# 中,关键是'
类型之前的 a 使其成为泛型。
类似地,类型可以以 a 为前缀,#
它允许任何可以向上转换为给定类型的类型。
使用内联方法的更复杂的类型约束可以与^
类型名称前的 a 一起使用,从而允许使用 .Net 类型系统无法实现的成员约束,并且仅适用于 F# 内联函数。
从规格:
'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'类型值的列表——这当然是映射的作用。