详细语法 (F#)

可用于 F# 语言中的多种构造的语法有两种形式:“详细语法”和“轻量语法”。 详细语法并不常用,但它的优势是对缩进的敏感程度较低。 轻量语法比较简短,并使用缩进来表示构造的开头和结尾,而不是使用诸如 begin、end、in 等附加关键字。 默认语法为轻量语法。 本主题介绍在未启用轻量语法时 F# 构造的语法。 详细语法始终处于启用状态,因此,即使您启用轻量语法,也仍然可以为某些构造使用详细语法。 可通过使用 #light "off" 指令禁用轻量语法。

构造表

下表显示了在轻量语法和详细语法存在差异的上下文中,用于 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 .. 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

class

type <class-name>(<params>) =
    ...
type <class-name>(<params>) =
    class
        ...
    end

Structure — 结构

[<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

interface

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 <module-name> =
    ...
module <module-name> =
    begin
        ...
    end

请参见

概念

代码格式设置准则 (F#)

其他资源

F# 语言参考

编译器指令 (F#)