功能定义包含单位F#

时间:2017-09-01 13:08:03

标签: function f#

我是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列表

这个单位来自哪里?而我的另一个称之为单位的功能 - >单位...... - > {正确的返回值},这就是错误。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

F#中的{p> 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的最后一个参数。