Környezetfüggő és kihagyott kifejezések
A környezetfüggő kifejezések olyan kifejezések, amelyek csak bizonyos környezetekben érvényesek, például az elemek neveinek használata másolási és frissítési kifejezésekben anélkül, hogy minősíteni kellene őket.
A kifejezések elhagyhatók, ha a fordító kikövetkezteti őket, és automatikusan beszúrja őket, például kiértékelési és hozzárendelési utasítások esetén.
A nyílt végű tartományok egy másik példa, amely a környezetfüggő és a kihagyott kifejezésekre is vonatkozik. Ezek csak bizonyos kontextusban érvényesek, és a fordító lefordítja őket normál Range
kifejezésekre a fordítás során megfelelő határok következtetésével.
Egy típusérték Range
egész számok sorozatát hozza létre, amelyeket egy kezdőérték, egy lépésérték (nem kötelező) és egy végérték határoz meg. A literális kifejezés 1..3
például Range
az 1,2,3 sorozatot hozza létre. Hasonlóképpen, a kifejezés 3..-1..1
a 3,2,1 sorozatot hozza létre. Tartományokkal is létrehozhat új tömböt egy meglévőből szeleteléssel, például:
let arr = [1,2,3,4];
let slice1 = arr[1..2..4]; // contains [2,4]
let slice2 = arr[2..-1..0]; // contains [3,2,1]
Nem definiálhat végtelen tartományt a következőben Q#: a kezdő és a záró értékeket mindig meg kell adni. Az egyetlen kivétel az, ha tömb szeletelésére használ egy Range
tömböt. Ebben az esetben a fordító ésszerűen kikövetkeztetheti a tartomány kezdő vagy záró értékeit.
Az előző tömbszeletelési példákban ésszerű, ha a fordító feltételezi, hogy a kívánt tartományvégnek a tömb utolsó elemének indexe kell lennie, ha a lépésméret pozitív. Ha a lépés mérete negatív, akkor a tartományvég valószínűleg a tömb első elemének indexe lesz. 0
A converzum a tartomány elejére tart.
Összegzésként, ha kihagyja a tartomány kezdőértékét, a kikövetkeztetett kezdési érték
- nulla, ha nincs megadva lépés, vagy a megadott lépés pozitív.
- a tömb hossza mínusz egy, ha a megadott lépés negatív.
Ha kihagyja a tartomány végértékét, a késleltetett végérték
- a tömb hossza mínusz egy, ha nincs megadva lépés, vagy a megadott lépés pozitív.
- nulla, ha a megadott lépés negatív.
Q# ezért lehetővé teszi a tömb szeletelő kifejezéseken belüli nyílt végű tartományok használatát, például:
let arr = [1,2,3,4,5,6];
let slice1 = arr[3...]; // slice1 is [4,5,6];
let slice2 = arr[0..2...]; // slice2 is [1,3,5];
let slice3 = arr[...2]; // slice3 is [1,2,3];
let slice4 = arr[...2..3]; // slice4 is [1,3];
let slice5 = arr[...2...]; // slice5 is [1,3,5];
let slice7 = arr[4..-2...]; // slice7 is [5,3,1];
let slice8 = arr[...-1..3]; // slice8 is [6,5,4];
let slice9 = arr[...-1...]; // slice9 is [6,5,4,3,2,1];
let slice10 = arr[...]; // slice10 is [1,2,3,4,5,6];
Mivel annak meghatározása, hogy a tartománylépés pozitív vagy negatív,futásidőben történik-e, a fordító beszúr egy megfelelő kifejezést, amely futásidőben lesz kiértékelve. A kihagyott végértékek esetében a beszúrt kifejezés step < 0 ? 0 | Length(arr)-1
, a kihagyott kezdőértékek step < 0 ? Length(arr)-1 | 0
esetében pedig az, hogy hol step
van a tartománylépéshez megadott kifejezés, vagy 1
ha nincs megadva lépés.
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: