Привязки let

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

Синтаксис

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

Замечания

Ключевое слово 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 в модуле, как показано в следующем коде.

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

Область и специальные возможности привязок 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# имеет этот атрибут.

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

См. также