let – vazby
Vazba přidruží identifikátor k hodnotě nebo funkci. Klíčové slovo použijete k vytvoření vazby let
názvu na hodnotu nebo funkci.
Syntaxe
// Binding a value:
let identifier-or-pattern [: type] =expressionbody-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =expressionbody-expression
Poznámky
Klíčové let
slovo se používá ve vazbových výrazech k definování hodnot nebo hodnot funkcí pro jeden nebo více názvů. Nejjednodušší forma výrazu let
vytvoří vazbu názvu na jednoduchou hodnotu následujícím způsobem.
let i = 1
Pokud výraz oddělíte od identifikátoru pomocí nového řádku, musíte odsadit každý řádek výrazu, jako v následujícím kódu.
let someVeryLongIdentifier =
// Note indentation below.
3 * 4 + 5 * 6
Místo názvu je možné zadat vzor obsahující názvy, například řazenou kolekci členů, jak je znázorněno v následujícím kódu.
let i, j, k = (1, 2, 3)
Výraz body je výraz , ve kterém se používají názvy. Základní výraz se zobrazí na vlastním řádku, odsazený tak, aby přesně odpovídal prvnímu znaku klíčového let
slova:
let result =
let i, j, k = (1, 2, 3)
// Body expression:
i + 2 * j + 3 * k
Vazba let
se může objevit na úrovni modulu, v definici typu třídy nebo v místních oborech, například v definici funkce. Vazba let
na nejvyšší úrovni v modulu nebo v typu třídy nemusí obsahovat základní výraz, ale na jiných úrovních oboru je povinný výraz těla. Vázané názvy jsou použitelné za bodem definice, ale ne v žádném okamžiku let
před vytvořením vazby, jak je znázorněno v následujícím kódu.
// Error:
printfn "%d" x
let x = 100
// OK:
printfn "%d" x
Vazby funkcí
Vazby funkcí se řídí pravidly pro vazby hodnot s výjimkou toho, že vazby funkcí obsahují název funkce a parametry, jak je znázorněno v následujícím kódu.
let function1 a = a + 1
Obecně platí, že parametry jsou vzory, například vzor řazené kolekce členů:
let function2 (a, b) = a + b
Výraz let
vazby se vyhodnotí jako hodnota posledního výrazu. Proto v následujícím příkladu kódu se vypočítá 100 * function3 (1, 2)
hodnota result
z , která se vyhodnotí jako 300
.
let result =
let function3 (a, b) = a + b
100 * function3 (1, 2)
Další informace najdete v tématu Funkce.
Poznámky k typu
Typy parametrů můžete zadat zahrnutím dvojtečky (:) následované názvem typu, všechny uzavřené v závorkách. Typ návratové hodnoty můžete zadat také tak, že za poslední parametr připojíte dvojtečku a typ. Úplné poznámky k typu pro function1
, s celými čísly jako typy parametrů, by byly následující.
let function1 (a: int) : int = a + 1
Pokud neexistují žádné explicitní parametry typu, použije se k určení typů parametrů funkcí odvození typu. To může zahrnovat automatickou generalizaci typu parametru, který má být obecný.
Další informace naleznete v tématu Automatické zobecnění a odvození typu.
Vazby let ve třídách
Vazba let
se může objevit v typu třídy, ale ne ve struktuře nebo typu záznamu. Chcete-li použít vazbu let v typu třídy, třída musí mít primární konstruktor. Parametry konstruktoru musí být uvedeny za názvem typu v definici třídy. Vazba let
v typu třídy definuje privátní pole a členy pro tento typ třídy a společně s do
vazbami v typu tvoří kód primárního konstruktoru pro daný typ. Následující příklady kódu ukazují třídu MyClass
s privátními poli field1
a 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
Rozsahy a field2
jsou omezeny field1
na typ, ve kterém jsou deklarovány. Další informace naleznete v tématu let
Vazby v třídách a třídách.
Parametry typu v vazbách let
Vazba let
na úrovni modulu, typu nebo ve výpočetním výrazu může mít explicitní parametry typu. Vazba let ve výrazu, například v definici funkce, nemůže mít parametry typu. Další informace najdete v tématu Obecné typy.
Atributy pro vazby let
Atributy lze použít na vazby nejvyšší úrovně let
v modulu, jak je znázorněno v následujícím kódu.
[<Obsolete>]
let function1 x y = x + y
Rozsah a přístupnost vazeb Let
Rozsah entity deklarované pomocí vazby let je omezen na část obsahujícího oboru (například funkce, modul, soubor nebo třída) po zobrazení vazby. Proto lze říci, že vazba let zavádí název do oboru. V modulu je pro klienty modulu přístupná letová hodnota nebo funkce, pokud je modul přístupný, protože vazby let v modulu se kompilují do veřejných funkcí modulu. Naproti tomu vazby ve třídě jsou pro třídu soukromé.
Funkce v modulech musí být obvykle kvalifikované názvem modulu při použití klientského kódu. Pokud má například modul Module1
funkci function1
, uživatelé určí Module1.function1
, aby odkazovaly na funkci.
Uživatelé modulu mohou použít deklaraci importu k zpřístupnění funkcí v rámci tohoto modulu, aniž by byli kvalifikovaní názvem modulu. V právě zmíněném příkladu mohou uživatelé modulu v takovém případě modul otevřít pomocí deklarace open Module1
importu a následně přímo odkazovat function1
.
module Module1 =
let function1 x = x + 1.0
module Module2 =
let function2 x =
Module1.function1 x
open Module1
let function3 x =
function1 x
Některé moduly mají atribut RequireQualifiedAccess, což znamená, že funkce, které zpřístupňují, musí být kvalifikované s názvem modulu. Například modul seznam jazyka F# má tento atribut.
Další informace o modulech a řízení přístupu najdete v tématu Moduly a řízení přístupu.