Поделиться через


Литералы

В этой статье представлена таблица, в которую показано, как указать тип литерала в F#.

Литеральные типы

В следующей таблице показаны литеральные типы в F#. Символы, представляющие цифры в шестнадцатеричной нотации, не учитывает регистр; символы, определяющие тип, чувствительны к регистру.

Тип Описание Суффикс или префикс Примеры
sbyte подписанное 8-разрядное целое число г 86y

0b00000101y
byte 8-разрядное 8-разрядное естественное число без знака uy 86uy

0b00000101uy
int16 подписанное 16-разрядное целое число s 86s
uint16 без знака 16-разрядное естественное число us 86us
INT

int32
32-разрядное целое число со знаком l или none 86

86l
uint

uint32
без знака 32-разрядное естественное число u или ul 86u

86ul
nativeint собственный указатель на подписанный естественный номер n 123n
unativeint собственный указатель как неподписанный естественный номер un 0x00002D3Fun
int64 64-разрядное целое число со знаком L 86L
uint64 64-разрядное естественное число без знака UL 86UL
single, float32 32-разрядное число с плавающей запятой F или f 4.14F или 4.14f или infinityf или -infinityf
Если 0x00000000lf
Плавать; Двухместный 64-разрядное число с плавающей запятой ничего 4.14или или 2.3E+322.3e+32 или infinity-infinity
LF 0x0000000000000000LF
bigint целое число не ограничено 64-разрядным представлением I 9999999999999999999999999999I
десятичное дробное число, представленное как фиксированная точка или рациональное число M или m 0.7833M или 0.7833m
Char символьный формат Юникода ничего 'a' или '\u0061'
Строка Строка Юникода ничего "text\n"

or

@"c:\filename"

or

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

or

"string1" + "string2"

См. также строки.
byte Символ ASCII Б 'a'B
byte[] строка ASCII Б "text"B
Строка или байт[] строка verbatim @ префикс @"\\server\share" (Юникод)

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

Именованные литералы

Значения, которые предназначены для констант, можно пометить атрибутом Литерала .

Этот атрибут влияет на то, что значение компилируется как константа. В следующем примере x оба и y ниже являются неизменяемыми значениями, но x оцениваются во время выполнения, в то время как y это константа времени компиляции.

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

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

Например, это различие имеет значение при вызове внешней функции, так как DllImport это атрибут, который должен знать значение myDLL во время компиляции. [<Literal>] Без объявления этот код не сможет компилироваться:

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

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

В выражениях сопоставления шаблонов идентификаторы, начинающиеся с строчных символов, всегда обрабатываются как переменные для привязки, а не как литералы, поэтому при определении литералы обычно следует использовать начальные буквы.

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

Замечания

Именованные литералы полезны для:

  • Сопоставление шаблонов when без предложения.
  • Аргументы атрибутов.
  • Аргументы поставщика статических типов.

Строки Юникода могут содержать явные кодировки, которые можно указать с помощью \u 16-разрядного шестнадцатеричного кода (0000 – FFFF) или кодировки UTF-32, которые можно указать с помощью \U 32-разрядного шестнадцатеричного кода, представляющего любую точку кода Юникода (000000000 – 0010FFFFFF).

Использование битовых операторов, отличных от ||| разрешенного.

Целые числа в других базах

Подписанные 32-разрядные целые числа также можно указать в шестнадцатеричных, восьмимерных или двоичных файлах с помощью 0x0o префикса или 0b префикса соответственно.

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

Символы подчеркивания в числовых литералах

Вы можете разделить цифры с символом подчеркивания (_).

let value = 0xDEAD_BEEF

let valueAsBits = 0b1101_1110_1010_1101_1011_1110_1110_1111

let exampleSSN = 123_45_6789

Специальные значения бесконечности с плавающей запятой

float Числовые типы с single плавающей запятой связаны со специальными значениями, представляющими положительное и отрицательное бесконечность.

Значение F# Тип F# Соответствующее значение .NET
infinity или +infinity float PositiveInfinity
-infinity float NegativeInfinity
infinityf или +infinityf single PositiveInfinity
-infinityf single NegativeInfinity

Эти значения можно использовать напрямую или возвращать при делении по нулю с плавающей запятой или слишком малому числу, который будет представлен заданным типом. Например:

> 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