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 function1
a 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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: