有人可以向我解释以下行是如何编译的吗?
[1 .. 10] |> List.map string
我希望以下函数签名位于字符串的位置。
(' T - >' U) - > ' T列表 - > ' U列表
我按以下方式阅读了上述签名:
List.map将函数作为输入(即(' T - >' U))并产生另一个函数作为输出(即' T list - >' U list)。
那么类型"字符串&#34>如何?满足执行地图操作所需的签名?
注:
我在学习F#的两个月里。另请注意,我是LOB开发人员而非计算机科学家。
答案 0 :(得分:3)
在Core.Operators(https://msdn.microsoft.com/en-us/library/ee353754.aspx)中,您定义了多个转换函数。一个是:
string : ^T -> string
您可以使用显式lambda
来调用它[1 .. 10] |> List.map (fun i -> string i)
请注意,lambda fun i -> string i
是int -> string
类型的函数,因此我们可以省略lambda并直接引用该函数。
[1 .. 10] |> List.map (string)
答案 1 :(得分:1)
在您的情况下,string是一个类似obj.ToString()
的函数let f = string
// FSI:
// val f : (obj -> string)
字符串签名定义为
string : ^T -> string
其中^ T是静态解析(编译时通用)类型参数。