我是f#编程的新手,我正在定义一些要使用的辅助函数。以下是其中两个:
let GetPieceAt piece playerType file rank = {
piece = {piece = piece; playerType = playerType} ;
place = { file= file; rank = rank}
}
let GetPieceOnRank piece rank playerType files () =
[for f in files -> GetPieceAt piece playerType f rank]
第一个功能是正确的类型:piece - > playerType - >文件 - >等级 - > PieceAt
然而,第二个功能有:piece - >等级 - > playerType - > seq - > 单位 - > PieceAt列表
这个单位来自哪里?而我的另一个称之为单位的功能 - >单位...... - > {正确的返回值},这就是错误。
我做错了什么?
答案 0 :(得分:6)
unit
由()
定义中的空括号GetPieceOnRank
表示。
与C#不同,函数不需要调用括号。也许这些括号的放置是一个错误,因为它们不是必需的,只是删除它们仍然允许代码编译。
let GetPieceOnRank piece rank playerType files =
[for f in files -> GetPieceAt piece playerType f rank]
答案 1 :(得分:2)
最后的两个括号是类型unit
的值。在交互式中尝试这个:
let a = ();;
> val a : unit = ()
由于您将此值放在参数列表中,编译器正确推断您的函数具有类型unit
的最后一个参数。