详细语法

F# 中的许多构造有两种语法形式: 详细语法轻型语法。 详细语法不如常用的,但具有对缩进不太敏感的优势。 轻型语法较短,使用缩进来指示构造的开始和结尾,而不是其他关键字,例如 beginend等等 in。 默认语法是轻型语法。 本主题介绍未启用轻型语法时 F# 构造的语法。 详细语法始终处于启用状态,因此即使启用轻型语法,仍可以对某些构造使用详细语法。

构造表

下表显示了 F# 语言构造的轻型和详细语法,这些语法在两种形式之间存在差异的上下文中。 在此表中,尖括号 (<>) 将用户提供的语法元素括起来。 有关这些构造中使用的语法的更多详细信息,请参阅每个语言构造的文档。

语言构造 轻量语法 详细语法
复合表达式
<expression1>
<expression2>
<expression1>; <expression2>

嵌套 let 绑定

let f x =
    let a = 1
    let b = 2
    x + a + b
let f x =
    let a = 1 in
    let b = 2 in
    x + a + b
代码块
(
    <expression1>
    <expression2>
)
begin
    <expression1>;
    <expression2>;
end
'for...do'
for counter = start to finish do
    ...
for counter = start to finish do
    ...
done
'while...do'
while <condition> do
    ...
while <condition> do
    ...
done
'for...in'
for var in start .. finish do
    ...
for var in start .. finish do
    ...
done
“do”
do
    ...
do
    ...
in
记录
type <record-name> =
    {
        <field-declarations>
    }
    <value-or-member-definitions>
type <record-name> =
    {
        <field-declarations>
    }
    with
        <value-or-member-definitions>
    end
type <class-name>(<params>) =
    ...
type <class-name>(<params>) =
    class
        ...
    end
结构
[<StructAttribute>]
type <structure-name> =
    ...
type <structure-name> =
    struct
        ...
    end
歧视联合
type <union-name> =
    | ...
    | ...
    ...
    <value-or-member definitions>
type <union-name> =
    | ...
    | ...
    ...
    with
        <value-or-member-definitions>
    end
接口
type <interface-name> =
    ...
type <interface-name> =
    interface
        ...
    end
对象表达式
{ new <type-name>
    with
        <value-or-member-definitions>
        <interface-implementations>
}
{ new <type-name>
    with
        <value-or-member-definitions>
    end
    <interface-implementations>
}
接口实现
interface <interface-name>
    with
        <value-or-member-definitions>
interface <interface-name>
    with
        <value-or-member-definitions>
    end
类型扩展
type <type-name>
    with
        <value-or-member-definitions>
type <type-name>
    with
        <value-or-member-definitions>
    end
模块
module <module-name> =
    ...
module <module-name> =
    begin
        ...
    end

另请参阅