Literale

Dieser Artikel enthält eine Tabelle, die zeigt, wie in F# der Typ eines Literals angegeben wird.

Literaltypen

In der folgenden Tabelle werden die Literaltypen in F# angegeben. Bei Zeichen, die Ziffern in Hexadezimalschreibweise darstellen, wird die Groß-/Kleinschreibung nicht beachtet. Bei Zeichen, die den Typ angeben, wird die Groß-/Kleinschreibung beachtet.

type Beschreibung Suffix oder Präfix Beispiele
sbyte ganze 8-Bit-Zahl mit Vorzeichen Y 86y

0b00000101y
byte natürliche 8-Bit-Zahl ohne Vorzeichen uy 86uy

0b00000101uy
int16 ganze 16-Bit-Zahl mit Vorzeichen s 86s
uint16 natürliche 16-Bit-Zahl ohne Vorzeichen USA 86us
INT

int32
ganze 32-Bit-Zahl mit Vorzeichen I oder keins 86

86l
uint

uint32
natürliche 32-Bit-Zahl ohne Vorzeichen u oder ul 86u

86ul
nativeint nativer Zeiger auf eine natürliche Zahl mit Vorzeichen n 123n
unativeint systemeigener Zeiger als natürliche Zahl ohne Vorzeichen un 0x00002D3Fun
int64 ganze 64-Bit-Zahl mit Vorzeichen L 86L
uint64 natürliche 64-Bit-Zahl ohne Vorzeichen UL 86UL
single, float32 32-Bit-Gleitkommazahl F oder f 4.14F oder 4.14f
lf 0x00000000lf
float; double 64-Bit-Gleitkommazahl Keine 4.14 oder 2.3E+32 oder 2.3e+32
LF 0x0000000000000000LF
BIGINT ganze Zahl, die nicht auf 64-Bit-Darstellung beschränkt ist I 9999999999999999999999999999I
Decimal als Festkommazahl oder rationale Zahl dargestellte Bruchzahl M oder m 0.7833M oder 0.7833m
Char Unicode-Zeichen Keine 'a' oder '\u0061'
String Unicode-Zeichenfolge Keine "text\n"

oder

@"c:\filename"

oder

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

oder

"string1" + "string2"

Siehe auch Zeichenfolgen.
byte ASCII-Zeichen B 'a'B
byte[] ASCII-Zeichenfolge B "text"B
String oder byte[] wörtliche Zeichenfolge @-Präfix @"\\server\share" (Unicode)

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

Benannte Literale

Werte, die Konstanten sein sollen, können mit dem Literal-Attribut markiert werden.

Dieses Attribut bewirkt, dass ein Wert als Konstante kompiliert wird. Im folgenden Beispiel sind x sowie y unveränderliche Werte, aber x wird zur Laufzeit ausgewertet, während y eine Kompilierzeitkonstante ist.

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

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

Diese Unterscheidung ist beispielsweise beim Aufrufen einer externen Funktion wichtig, da DllImport ein Attribut ist, das den Wert von myDLL während der Kompilierung kennen muss. Ohne die Deklaration [<Literal>] kann dieser Code nicht kompiliert werden:

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

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

In Musterabgleichsausdrücken werden Bezeichner, die mit Kleinbuchstaben beginnen, immer als zu bindende Variablen statt als Literale behandelt. Verwenden Sie daher im Allgemeinen Großbuchstaben am Wortanfang, wenn Sie Literale definieren.

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

Hinweise

Benannte Literale sind nützlich für:

  • Musterabgleich ohne when-Klausel.
  • Attributargumente.
  • Statische Typanbieterargumente.

Unicode-Zeichenfolgen können explizite Codierungen enthalten, die Sie mithilfe von \u gefolgt von einem 16-Bit-Hexadezimalcode (0000–FFFF). Sie können auch UTF-32-Codierungen enthalten, die Sie mithilfe von \U gefolgt von 32-Bit-Hexadezimalcode angeben können, der einen beliebigen Unicode-Codepunkt (00000000–0010FFFF) darstellt.

Die Verwendung anderer bitweiser Operatoren als ||| ist nicht zulässig.

Ganze Zahlen in anderen Basen

Ganze 32-Bit-Zahlen mit Vorzeichen können auch hexadezimal, oktal oder binär mit einem 0x-, 0o-, bzw. 0b-Präfix angegeben werden.

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

Unterstriche in numerischen Literalen

Sie können Ziffern mit dem Unterstrich (_) trennen.

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789