Привязки 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# имеет этот атрибут.
Дополнительные сведения о модулях и управлении доступом см. в разделе "Модули" и контроль доступа.