Привязки let

Привязка связывает идентификатор со значением или функцией. Ключевое слово используется для привязки let имени к значению или функции.

Синтаксис

// Binding a value:
let identifier-or-pattern [: type] =expressionbody-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =expressionbody-expression

Remarks

Ключевое let слово используется в выражениях привязки для определения значений или значений функций для одного или нескольких имен. Простейшая форма let выражения привязывает имя к простому значению, как показано ниже.

let i = 1

Если выражение отделяется от идентификатора с помощью новой строки, необходимо отступить каждую строку выражения, как показано в следующем коде.

let someVeryLongIdentifier =
    // Note indentation below.
    3 * 4 + 5 * 6

Вместо имени можно указать шаблон, содержащий имена, например кортеж, как показано в следующем коде.

let i, j, k = (1, 2, 3)

Основное выражение — это выражение , в котором используются имена. Выражение тела отображается в отдельной строке с отступом, чтобы в точности выстраивать текст с первым символом в ключевом слове let :

let result =

    let i, j, k = (1, 2, 3)

    // Body expression:
    i + 2*j + 3*k

let Привязка может отображаться на уровне модуля, в определении типа класса или в локальных областях, например в определении функции. let Привязка на верхнем уровне в модуле или в типе класса не требует выражения тела, но на других уровнях области требуется выражение тела. Привязанные имена можно использовать после точки определения, но не в любой момент до let появления привязки, как показано в следующем коде.

// Error:
printfn "%d" x
let x = 100
// OK:
printfn "%d" x

Привязки функций

Привязки функций следуют правилам для привязок значений, за исключением того, что привязки функций включают имя функции и параметры, как показано в следующем коде.

let function1 a =
    a + 1

Как правило, параметры являются шаблонами, такими как шаблон кортежа:

let function2 (a, b) = a + b

Выражение let привязки принимает значение последнего выражения. Таким образом, в следующем примере кода вычисляется значение result , 100 * function3 (1, 2)результатом которого является 300.

let result =
    let function3 (a, b) = a + b
    100 * function3 (1, 2)

См. дополнительные сведения о функциях.

Заметки к типу

Можно указать типы параметров, включив двоеточие (:) за которым следует имя типа, все заключенные в круглые скобки. Можно также указать тип возвращаемого значения, добавив двоеточие и тип после последнего параметра. Примечания полного типа для function1целочисленных чисел в качестве типов параметров будут вычислиться следующим образом.

let function1 (a: int) : int = a + 1

Если нет явных параметров типа, для определения типов параметров функций используется вывод типов. Это может включать автоматическое обобщение типа параметра, который должен быть универсальным.

Дополнительные сведения см. в разделе "Автоматическая обобщение и вывод типов".

Привязки let в классах

Привязка let может отображаться в типе класса, но не в структуре или типе записей. Чтобы использовать привязку let в типе класса, класс должен иметь первичный конструктор. Параметры конструктора должны отображаться после имени типа в определении класса. Привязка let в типе класса определяет закрытые поля и члены для этого типа класса, а вместе с do привязками в типе формирует код для основного конструктора для этого типа. В следующих примерах кода показан класс MyClass с закрытыми полями field1 и field2.

type MyClass(a) =
    let field1 = a
    let field2 = "text"
    do printfn "%d %s" field1 field2
    member this.F input =
        printfn "Field1 %d Field2 %s Input %A" field1 field2 input

Области field1 и field2 ограничены типом, в котором они объявлены. Дополнительные сведения см. в разделе let "Привязки" в классах и классах.

Параметры типа в let Bindings

let Привязка на уровне модуля, в типе или в вычислительном выражении может иметь явные параметры типа. Разрешить привязку в выражении, например в определении функции, не может иметь параметры типа. Дополнительные сведения см. в статье Универсальные шаблоны.

Атрибуты в let Bindings

Атрибуты можно применять к привязкам верхнего уровня let в модуле, как показано в следующем коде.

[<Obsolete>]
let function1 x y = x + y

Область и специальные возможности привязок Let

Область сущности, объявленной с привязкой let, ограничена частью содержащей области (например, функцией, модулем, файлом или классом) после появления привязки. Поэтому можно сказать, что привязка let вводит имя в область. В модуле значение или функция, привязанные к поддержке, доступны для клиентов модуля, если модуль доступен, так как привязки let в модуле компилируются в открытые функции модуля. В отличие от этого, пусть привязки в классе являются закрытыми для класса.

Как правило, функции в модулях должны быть квалифицированы по имени модуля при использовании клиентским кодом. Например, если модуль Module1 имеет функцию function1, пользователи будут указывать Module1.function1 ссылку на функцию.

Пользователи модуля могут использовать объявление импорта, чтобы сделать функции в этом модуле доступными для использования без необходимости указывать имя модуля. В приведенном выше примере пользователи модуля могут в этом случае открыть модуль с помощью объявления open Module1 импорта и далее ссылаться непосредственно.function1

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

open Module1

let function3 x =
    function1 x

Некоторые модули имеют атрибут RequireQualifiedAccess, то есть функции, которые они предоставляют, должны быть квалифицированы с именем модуля. Например, модуль списка F# имеет этот атрибут.

Дополнительные сведения о модулях и управлении доступом см. в разделе "Модули " и "Управление доступом".

См. также