Sdílet prostřednictvím


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.

Viz také