Подробный синтаксис

Существует две формы синтаксиса, доступные для многих конструкций в F#: подробный синтаксис и упрощенный синтаксис. Подробный синтаксис не так часто используется, но имеет преимущество быть менее чувствительным к отступу. Упрощенный синтаксис короче и использует отступ для сигнала о начале и конце конструкций, а не дополнительных ключевое слово, таких как begin, endinи т. д. Синтаксис по умолчанию — это упрощенный синтаксис. В этом разделе описывается синтаксис конструкций 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
"для... do'
for counter = start to finish do
    ...
for counter = start to finish do
    ...
done
"В то время как... do'
while <condition> do
    ...
while <condition> do
    ...
done
"для... 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

См. также