嗯,嗯,这是一个很难恰当地命名的问题。无论如何,我想知道为什么,鉴于这种类型声明
type T = {
C : int
}
无法编译:
let foo () =
{
C = printfn ""; 3
}
但是这样做:
let foo () =
{
C =
printfn ""; 3
}
编译器错误还是设计错误?
答案 0 :(得分:5)
“按设计工作”可能比“ bug”更重要,但这只是一个整体而已。
分号是一个表达式排序运算符(按您的预期用法),也是一个记录字段分隔符。在第一种情况下,解析器假定后者,并对此感到困惑。在第二种情况下,通过缩进可以清楚地知道分号表示表达顺序。
您可以不用将字段分成两行就可以解决这个问题:
let foo () =
{
C = (printfn ""; 3)
}