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


Literálok

Ez a cikk egy táblázatot tartalmaz, amely bemutatja, hogyan adhatja meg a literál típusát az F#-ban.

Literális típusok

Az alábbi táblázat az F#-ban szereplő literális típusokat mutatja be. A hexadecimális jelölés számjegyeit ábrázoló karakterek nem megkülönböztetik a kis- és nagybetűket; a típust azonosító karakterek megkülönböztetik a kis- és nagybetűket.

Típus Leírás Utótag vagy előtag Példák
sbyte aláírt 8 bites egész szám y 86y

0b00000101y
bájt aláíratlan 8 bites természetes szám Uy 86uy

0b00000101uy
int16 aláírt 16 bites egész szám s 86s
uint16 aláíratlan 16 bites természetes szám us 86us
egész

int32
aláírt 32 bites egész szám l vagy nincs 86

86l
uint

uint32
aláíratlan 32 bites természetes szám u vagy ul 86u

86ul
natívint natív mutató egy aláírt természetes számra n 123n
unativeint natív mutató aláíratlan természetes számként un 0x00002D3Fun
int64 aláírt 64 bites egész szám L 86L
uint64 aláíratlan 64 bites természetes szám UL 86UL
single, float32 32 bites lebegőpontos szám F vagy f 4.14Fvagy 4.14f vagy infinityf-infinityf
Lf 0x00000000lf
Úszó; Dupla 64 bites lebegőpontos szám Nincs 4.14vagy 2.3E+32 vagy 2.3e+32infinity-infinity
LF 0x0000000000000000LF
bigint egész szám, amely nem korlátozódik a 64 bites ábrázolásra d 9999999999999999999999999999I
tizedes törtszám rögzített pontként vagy racionális számként M vagy m 0.7833M vagy 0.7833m
Char Unicode-karakter Nincs 'a' vagy '\u0061'
Sztring Unicode-sztring Nincs "text\n"

vagy

@"c:\filename"

vagy

"""<book title="Paradise Lost">"""

vagy

"string1" + "string2"

Lásd még : Sztringek.
bájt ASCII-karakter h 'a'B
bájt[] ASCII-sztring h "text"B
Sztring vagy bájt[] verbatim sztring @ előtag @"\\server\share" (Unicode)

@"\\server\share"B (ASCII)

Névvel ellátott literálok

Az állandóknak szánt értékek a Literál attribútummal jelölhetők.

Ennek az attribútumnak az a hatása, hogy egy érték állandóként lesz lefordítva. Az alábbi példában mind xy az alábbi értékek nem módosíthatók, de x futásidőben vannak kiértékelve, míg y a fordítási idő állandója.

let x = "a" + "b" // evaluated at run-time

[<Literal>]
let y = "a" + "b" // evaluated at compile-time

Ez a megkülönböztetés például egy külső függvény meghívásakor számít, mivel DllImport egy attribútum, amely a fordítás során ismernie kell az értékeketmyDLL. A deklaráció nélkül a [<Literal>] kód fordítása sikertelen lenne:

[<Literal>]
let myDLL = "foo.dll"

[<DllImport(myDLL, CallingConvention = CallingConvention.Cdecl)>]
extern void HelloWorld()

A mintaegyező kifejezésekben a kisbetűs karakterekkel kezdődő azonosítók mindig a konstansok helyett a kötött változókként lesznek kezelve, ezért a literálok definiálásakor általában kezdőbetűket kell használni.

[<Literal>]
let SomeJson = """{"numbers":[1,2,3,4,5]}"""

[<Literal>]
let Literal1 = "a" + "b"

[<Literal>]
let FileLocation =   __SOURCE_DIRECTORY__ + "/" + __SOURCE_FILE__

[<Literal>]
let Literal2 = 1 ||| 64

[<Literal>]
let Literal3 = System.IO.FileAccess.Read ||| System.IO.FileAccess.Write

Megjegyzések

A névvel ellátott literálok a következőkhöz hasznosak:

  • Mintaegyezés záradék nélkül when .
  • Attribútumargumentumok.
  • Statikus típusú szolgáltató argumentumai.

A Unicode-sztringek olyan explicit kódolásokat tartalmazhatnak, \u amelyeket egy 16 bites hexadecimális kód (0000 - FFFF) vagy UTF-32 kódolással adhat meg, amelyet egy 32 bites hexadecimális kód követ \U , amely bármilyen Unicode kódpontot jelöl (00000000 – 0010FFFF).

A bitenkénti operátorok ||| használata nem engedélyezett.

Egész számok más alapokban

Az aláírt 32 bites egész számok hexadecimális, oktális vagy bináris értékben is megadhatóak egy vagy 0o0b több 0xelőtag használatával.

let numbers = (0x9F, 0o77, 0b1010)
// Result: numbers : int * int * int = (159, 63, 10)

Aláhúzásjelek numerikus literálokban

Az aláhúzásjeljellel (_) elválaszthatja a számjegyeket.

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789

Speciális lebegőpontos végtelenértékek

Mind a lebegőpontos numerikus típusok, mind a floatsingle lebegőpontos numerikus típusok speciális értékekkel rendelkeznek, amelyek pozitív és negatív végtelenséget jelképeznek.

F# érték F# típus Megfelelő .NET-érték
infinity vagy +infinity float PositiveInfinity
-infinity float NegativeInfinity
infinityf vagy +infinityf single PositiveInfinity
-infinityf single NegativeInfinity

Ezek az értékek használhatók közvetlenül, vagy ha lebegőpontos nullával vagy túl kicsi számmal osztják el, hogy az adott típus képviselve legyen. Példa:

> 1.0/0.0;;
val it: float = infinity

> 1.0/(-0.0);;
val it: float = -infinity

> 1.0/0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
;;
val it: float = infinity