Valori 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 | valore intero con segno a 8 bit | y | 86y 0b00000101y |
byte | numero naturale senza segno a 8 bit | uy | 86uy 0b00000101uy |
int16 | valore intero con segno a 16 bit | s | 86s |
uint16 | numero naturale senza segno a 16 bit | us | 86us |
int int32 |
valore intero con segno a 32 bit | l o nessuna | 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 | valore intero con segno a 64 bit | L | 86L |
uint64 | numero naturale senza segno a 64 bit | UL | 86UL |
singolo, float32 | numero a virgola mobile a 32 bit | F o f | 4.14F o 4.14f o infinityf o -infinityf |
lf | 0x00000000lf |
||
float; doppia | numero a virgola mobile a 64 bit | Nessuno | 4.14 o 2.3E+32 o 2.3e+32 o infinity o -infinity |
LF | 0x0000000000000000LF |
||
bigint | valore intero non limitato alla rappresentazione a 64 bit | I | 9999999999999999999999999999I |
decimale | numero frazionario 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[] | stringhe letterali | prefisso @ | @"\\server\share" (Unicode)@"\\server\share"B (ASCII) |
Valori letterali denominati
I valori destinati a essere costanti possono essere contrassegnati con l'attributo valore letterale.
Questo attributo ha l'effetto di causare la compilazione di un valore come costante. Nell'esempio seguente, sia x
che y
seguenti sono valori non modificabili, ma x
viene valutato 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 dichiarazione di [<Literal>]
, 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 in genere è consigliabile usare le iniziali maiuscole 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 una clausola
when
. - Argomenti di 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 codifiche UTF-32 che è possibile specificare usando \U
seguito da un codice esadecimale a 32 bit che rappresenta qualsiasi punto di codice Unicode (000000000 - 0010FFFF).
L'uso di operatori bit per bit diversi da |||
non è consentito.
Valori interi in altre basi
È anche possibile specificare valori interi con segno a 32 bit rispettivamente in un prefisso esadecimale, ottale o binario usando un prefisso 0x
, 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
Valori di infinito a virgola mobile speciali
Entrambi i tipi numerici a virgola mobile float
e single
hanno associato valori speciali che rappresentano un infinito positivo e negativo.
Valore F# | Tipo F# | Valore .NET corrispondente |
---|---|---|
infinity oppure +infinity |
float |
PositiveInfinity |
-infinity |
float |
NegativeInfinity |
infinityf oppure +infinityf |
single |
PositiveInfinity |
-infinityf |
single |
NegativeInfinity |
Questi valori possono essere utilizzati direttamente o vengono restituiti quando si divide per zero a virgola mobile o un numero troppo piccolo per essere rappresentato dal tipo specificato. Ad esempio:
> 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