Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A környezetfüggő kifejezések olyan kifejezések, amelyek csak bizonyos környezetekben érvényesek, például az elemnevek használata másolási és frissítési kifejezésekben anélkül, hogy minősíteni kellene őket.
A kifejezések kihagyhatók , amikor a fordító kikövetkezteti őket, és automatikusan beszúrják őket, például kiértékelési és újbóli hozzárendelési utasításokat.
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ó megfelelő határok következtetésével lefordítja őket normál Range
kifejezésekre a fordítás során.
A Range
típusú érték 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 Range
konstans kifejezés 1..3
például az 1,2,3 sorozatot hozza létre. Hasonlóképpen, a 3..-1..1
kifejezés 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 Q#; a kezdő és a záró értéket mindig meg kell adni. Az egyetlen kivétel az, ha Range
használ egy tömb szeleteléséhez. Ebben az esetben a fordító észszerűen következtethet a tartomány kezdő vagy záró értékeire.
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# így 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-e futásidőben, a fordító beszúr egy megfelelő kifejezést, amelyet futásidőben értékelnek ki. A kihagyott végértékek esetében a beszúrt kifejezés step < 0 ? 0 | Length(arr)-1
, a kihagyott kezdőértékek esetében pedig step < 0 ? Length(arr)-1 | 0
, ahol step
a tartománylépéshez megadott kifejezés, vagy 1
, ha nincs megadva lépés.