let — Powiązania (F#)

A wiązania kojarzy identyfikator z wartości lub funkcji.Za pomocą let słowa kluczowego, aby powiązać nazwę wartości lub funkcji.

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

Uwagi

let w wiązaniu wyrażeń do definiowania wartości lub wartości funkcji jedną lub więcej nazw zostanie użyte słowo kluczowe.Najprostszą formą let wyrażenie wiąże nazwę prostą wartością w następujący sposób.

let i = 1

Jeśli wyrażenie z identyfikatorem oddzielenia się przy użyciu nowego wiersza, musi wcięcie każdego wiersza wyrażenia, jak w poniższym kodzie.

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

Zamiast po prostu nazwy deseń, który zawiera nazwy można określić, na przykład krotka, jak pokazano w poniższym kodzie.

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

body-expression Jest wyrażenie, w którym są używane nazwy.Wyrażenie treści pojawia się w osobnym wierszu wcięty do linii się dokładnie z pierwszego znaku w let słowa kluczowego:

let result =
    let i, j, k = (1, 2, 3)
    // Body expression: 
    i + 2*j + 3*k

A let powiązania mogą pojawiać się na poziomie modułu, w definicji typu klasy lub w lokalnym zakresy, tak jak w definicji funkcji.A let powiązania na najwyższym poziomie w module lub typu klasy musi mieć wyrażenie ciała, ale na innych poziomach zakres wymagane jest wyrażenie ciała.Nazwy związane są użyteczne po pkt definicji, ale nie w dowolnym momencie, przed let wiązania pojawi się, jak przedstawiono w poniższym kodzie.

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

Funkcja wiązania

Funkcji wiązania należy przestrzegać reguł dla wiązania wartości z wyjątkiem, że funkcja wiązania obejmują nazwę funkcji i parametry, jak pokazano w poniższym kodzie.

let function1 a =
    a + 1

Ogólnie rzecz biorąc desenie, takie jak deseń krotka są parametry:

let function2 (a, b) = a + b

A let wiążące wyrażenie zwraca wartość ostatniego wyrażenia.Dlatego w poniższym przykładzie, wartości result jest obliczana z 100 * function3 (1, 2), którego wynikiem jest 300.

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

Aby uzyskać więcej informacji, zobacz Funkcje (F#).

Wskazanie typu

Można określić typy parametrów przez łącznie z dwukropkiem (:) następuje nazwa typu, wszystkie ujętego w nawiasy.Można również określić typ zwracanej wartości przez dołączenie dwukropek i wpisz po ostatnim parametrem.Adnotacje pełnego typu dla function1, z liczb całkowitych jako typy parametrów, są w następujący sposób.

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

Gdy nie ma parametrów typu jawne, wnioskowanie typ jest używany do określenia typów parametrów funkcji.Może to dotyczyć, automatycznie uogólnianie typ parametru być rodzajowy.

Aby uzyskać więcej informacji, zobacz Automatyczna generalizacja (F#) i Wnioskowanie o typie (F#).

Niech wiązania klas

A let powiązania mogą być wyświetlane w typu klasy, ale nie w strukturze lub typu rekordu.Aby użyć let, wiążące typu klasy, klasy musi mieć konstruktora podstawowego.Parametry Konstruktora musi znajdować się po nazwie typu w definicji klasy.A let powiązania typu klasy definiuje prywatnych pól i elementów członkowskich dla tego typu klasy i, wraz z do powiązania typu, stanowi kod konstruktora podstawowego dla typu.Następujące przykłady kodu Pokaż klasy MyClass z pola private field1 i 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

Zakresy z field1 i field2 są ograniczone do typu one zgłoszone.Aby uzyskać więcej informacji, zobacz Powiązania let w klasach (F#) i Klasy (F#).

Parametrów typu w let wiązania

A let powiązania na poziomie modułu, typu lub wyrażenie obliczeń może mieć parametrów typu jawne.Niech, wiążące w wyrażeniu, takich jak wewnątrz definicji funkcji, nie mogą mieć parametrów typu.Aby uzyskać więcej informacji, zobacz Typy ogólne (F#).

Atrybuty let wiązania

Atrybuty mogą być stosowane do najwyższego poziomu let wiązania w module, jak pokazano w poniższym kodzie.

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

Zakres i dostępność Let wiązania

Zakres podmiot zadeklarowana z powiązaniem let jest ograniczony do części zawierających zakresu (na przykład funkcja modułu, pliku lub klasy), po pojawieniu się wiązania.W związku z tym można powiedzieć, że powiązanie let wprowadza nazwę do zakresu.W module wartości związanej z let lub funkcja jest dostępna dla klientów moduł tak długo, jak moduł jest dostępny, ponieważ let powiązania w module są kompilowane do publicznych funkcji modułu.Natomiast let powiązania w klasie są prywatne klasy.

Normalnie funkcje w modułach musi być kwalifikowany nazwa modułu, gdy jest używana przez klienta kodu.Na przykład, jeśli moduł Module1 funkcję function1, określić użytkowników Module1.function1 do odwoływania się do funkcji.

Użytkownicy modułu może udostępnić funkcje w ramach tego modułu do użytku bez jest kwalifikowana nazwa modułu za pomocą deklaracji przywozowej.W przykładzie wymienionych użytkowników modułu można otworzyć w tym przypadku moduł przy użyciu Otwórz deklaracji importu Module1 i następnie odwoływać się do function1 bezpośrednio.

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

    open Module1
    let function3 x =
        function1 x

Niektóre moduły mają atrybut RequireQualifiedAccess, co oznacza, funkcje, które udostępniają musi być poprzedzone nazwa modułu.Na przykład moduł F# listy ma ten atrybut.

Aby uzyskać więcej informacji na moduły i kontroli dostępu, zobacz Moduły (F#) i Kontrola dostępu (F#).

Zobacz też

Informacje

Funkcje (F#)

Powiązania let w klasach (F#)