Megosztás a következőn keresztül:


Kötések használata

A kötések egy azonosítót társítanak egy értékkel vagy függvénnyel. A kulcsszóval let egy nevet egy értékhez vagy függvényhez köthet.

Syntax

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

Megjegyzések

A let kulcsszó a kötési kifejezésekben egy vagy több név értékeinek vagy függvényértékeinek meghatározására szolgál. A kifejezés legegyszerűbb formája egy let nevet egy egyszerű értékhez köt, az alábbiak szerint.

let i = 1

Ha a kifejezést egy új sor használatával választja el az azonosítótól, a kifejezés minden sorát be kell húznia, ahogyan az alábbi kódban is látható.

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

A név helyett megadható például egy névből álló minta, ahogyan az az alábbi kódban is látható.

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

A törzskifejezés az a kifejezés, amelyben a neveket használják. A törzskifejezés a saját sorában jelenik meg, behúzással pontosan a kulcsszó első karakterével let egybehúzva:

let result =

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

    // Body expression:
    i + 2 * j + 3 * k

A let kötések megjelenhetnek a modul szintjén, az osztálytípus definíciójában vagy a helyi hatókörökben, például egy függvénydefinícióban. Egy let modul vagy osztálytípus legfelső szintjén lévő kötésnek nem kell törzskifejezéssel rendelkeznie, más hatókörszinteken azonban a törzskifejezésre van szükség. A kötött nevek a definíciós pont után használhatók, de a let kötés megjelenése előtt egy ponton sem, ahogyan az az alábbi kódban is látható.

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

Függvénykötések

A függvénykötések az értékkötésekre vonatkozó szabályokat követik, azzal a kivételével, hogy a függvénykötések tartalmazzák a függvény nevét és paramétereit, ahogyan az az alábbi kódban látható.

let function1 a = a + 1

A paraméterek általában minták, például a rekordminta:

let function2 (a, b) = a + b

A let kötési kifejezés kiértékelése az utolsó kifejezés értékére történik. Ezért a következő kód példában az érték result kiszámítása a következőből 100 * function3 (1, 2)történik, amely kiértékeli a következőt 300: .

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

További információ: Functions.

Írjon be széljegyzeteket

A paraméterek típusait kettőspont (:) után egy típusnév, zárójelek közé zárt típusnév használatával adhatja meg. A visszatérési érték típusát a kettőspont hozzáfűzésével és az utolsó paraméter utáni típussal is megadhatja. A paramétertípusok egész számokat tartalmazó teljes típusú széljegyzetei function1a következők.

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

Ha nincsenek explicit típusparaméterek, a függvények paramétertípusainak meghatározásához típuskövetkeztetést használunk. Ez magában foglalhatja az általános paraméter típusának automatikus általánosítását.

További információ: Automatikus általánosítás és Típuskövetkeztetés.

Kötések használata osztályokban

A let kötések osztálytípusban is megjelenhetnek, struktúrában vagy rekordtípusban azonban nem. A let kötés osztálytípusban való használatához az osztálynak elsődleges konstruktorsal kell rendelkeznie. A konstruktorparamétereknek a típus neve után kell megjelennie az osztálydefinícióban. Az let osztálytípusban lévő kötések az adott osztálytípushoz definiálnak privát mezőket és tagokat, és a típus kötéseivel do együtt a típus elsődleges konstruktorának kódját alkotják. Az alábbi példakód egy privát mezőket field1 tartalmazó osztályt MyClass és 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

A deklarált field1 típusra korlátozódnak és field2 hatókörük is korlátozott. További információ: let Kötések osztályokban és osztályokban.

Típusparaméterek a Let Bindingsben

A let modul szintjén, típusban vagy számítási kifejezésben lévő kötések explicit típusparaméterekkel rendelkezhetnek. Egy kifejezésben, például egy függvénydefinícióban lévő let-kötés nem rendelkezhet típusparaméterekkel. További információ: Generics.

Attribútumok a let Bindingsen

Attribútumok alkalmazhatók a modul legfelső szintű let kötéseihez, ahogy az az alábbi kódban is látható.

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

A Let Bindings hatóköre és akadálymentessége

A let kötéssel deklarált entitás hatóköre a kötés megjelenése után a hatókörre (például függvényre, modulra, fájlra vagy osztályra) korlátozódik. Ezért elmondható, hogy a let binding egy nevet vezet be egy hatókörbe. Egy modulban egy let-bound érték vagy függvény mindaddig elérhető a modul ügyfelei számára, amíg a modul elérhető, mivel a modul let kötései a modul nyilvános függvényeibe vannak lefordítva. Ezzel szemben hagyja, hogy egy osztály kötései privátak legyenek az osztály számára.

A modulokban lévő függvényeket általában a modul nevével kell minősíteni, amikor ügyfélkóddal használják. Ha például egy modul Module1 rendelkezik egy függvénnyel function1, a felhasználók megadják Module1.function1 , hogy hivatkoznak-e a függvényre.

A modul felhasználói importálási deklarációval elérhetővé tehetik a modulban lévő függvényeket anélkül, hogy a modul neve minősíteni szeretné őket. Az imént említett példában a modul felhasználói ebben az esetben megnyithatják a modult az importálási deklaráció open Module1 használatával, majd közvetlenül hivatkozhatnak rá function1 .

module Module1 =
    let function1 x = x + 1.0

module Module2 =
    let function2 x =
        Module1.function1 x

open Module1

let function3 x =
    function1 x

Egyes moduloknak a RequireQualifiedAccess attribútummal kell rendelkezniük, ami azt jelenti, hogy az általuk elérhetővé tett függvényeket a modul nevével kell minősíteni. Az F# List modul például ezt az attribútumot tartalmazza.

A modulokról és a hozzáférés-vezérlésről további információt a Modulok és a Hozzáférés-vezérlés című témakörben talál.

Lásd még