为什么不能在记录表达式的同一行上添加语句?

时间:2018-07-26 19:39:47

标签: f#

嗯,嗯,这是一个很难恰当地命名的问题。无论如何,我想知道为什么,鉴于这种类型声明

type T = {
    C : int
}

无法编译:

let foo () =
    {
        C = printfn ""; 3
    }

但是这样做:

let foo () =
    {
        C = 
            printfn ""; 3
    }

编译器错误还是设计错误?

1 个答案:

答案 0 :(得分:5)

“按设计工作”可能比“ bug”更重要,但这只是一个整体而已。

分号是一个表达式排序运算符(按您的预期用法),也是一个记录字段分隔符。在第一种情况下,解析器假定后者,并对此感到困惑。在第二种情况下,通过缩进可以清楚地知道分号表示表达顺序。

您可以不用将字段分成两行就可以解决这个问题:

let foo () =
    {
        C = (printfn ""; 3)
    }