Letterali

Questo articolo fornisce una tabella che illustra come specificare il tipo di un valore letterale in F#.

Tipi letterali

La tabella seguente illustra i tipi letterali in F#. I caratteri che rappresentano cifre nella notazione esadecimale non fanno distinzione tra maiuscole e minuscole; caratteri che identificano il tipo fanno distinzione tra maiuscole e minuscole.

Tipo Descrizione Suffisso o prefisso Esempi
sbyte intero con segno a 8 bit y 86y

0b00000101y
byte numero naturale senza segno a 8 bit Uy 86uy

0b00000101uy
int16 intero con segno a 16 bit s 86s
uint16 numero naturale senza segno a 16 bit us 86us
int

int32
intero con segno a 32 bit l o nessuno 86

86l
uint

uint32
numero naturale senza segno a 32 bit u o ul 86u

86ul
nativeint puntatore nativo a un numero naturale con segno n 123n
unativeint puntatore nativo come numero naturale senza segno un 0x00002D3Fun
int64 intero con segno a 64 bit L 86L
uint64 numero naturale senza segno a 64 bit UL 86UL
single, float32 Numero a virgola mobile a 32 bit F o f 4.14F oppure 4.14f
Se 0x00000000lf
Galleggiante; Doppia Numero a virgola mobile a 64 bit Nessuno 4.14 o 2.3E+32 o 2.3e+32
LF 0x0000000000000000LF
bigint Integer non limitato alla rappresentazione a 64 bit I 9999999999999999999999999999I
decimale numero frazionaria rappresentato come un punto fisso o un numero razionale M o m 0.7833M oppure 0.7833m
Char Carattere Unicode Nessuno 'a' oppure '\u0061'
String Stringa Unicode Nessuno "text\n"

or

@"c:\filename"

or

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

or

"string1" + "string2"

Vedere anche Stringhe.
byte Carattere ASCII G 'a'B
byte[] Stringa ASCII G "text"B
Stringa o byte[] stringa verbatim Prefisso @ @"\\server\share" (Unicode)

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

Valori letterali denominati

I valori destinati a essere costanti possono essere contrassegnati con l'attributo Literal .

Questo attributo ha l'effetto di causare la compilazione di un valore come costante. Nell'esempio seguente, sia che xy di seguito sono valori non modificabili, ma x vengono valutati in fase di esecuzione, mentre y è una costante in fase di compilazione.

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

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

Ad esempio, questa distinzione è importante quando si chiama una funzione esterna, perché DllImport è un attributo che deve conoscere il valore di myDLL durante la compilazione. Senza la [<Literal>] dichiarazione, il codice non verrà compilato:

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

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

Nelle espressioni di corrispondenza dei criteri di ricerca gli identificatori che iniziano con caratteri minuscoli vengono sempre considerati variabili da associare, anziché come valori letterali, pertanto è consigliabile usare in genere maiuscole iniziali quando si definiscono valori letterali.

[<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

Osservazioni:

I valori letterali denominati sono utili per:

  • Criteri di ricerca senza clausola when .
  • Argomenti dell'attributo.
  • Argomenti del provider di tipi statici.

Le stringhe Unicode possono contenere codifiche esplicite che è possibile specificare usando \u seguito da un codice esadecimale a 16 bit (0000 - FFFF) o da codifiche UTF-32 che è possibile specificare usando \U seguito da un codice esadecimale a 32 bit che rappresenta qualsiasi punto di codice Unicode (00000000 - 0010FFFF).

L'uso di operatori bit per bit diversi da ||| non è consentito.

Numeri interi in altre basi

I numeri interi con segno a 32 bit possono anche essere specificati rispettivamente in formato esadecimale, ottale o binario usando un 0xprefisso , 0o o 0b .

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

Caratteri di sottolineatura nei valori letterali numerici

È possibile separare le cifre con il carattere di sottolineatura (_).

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789