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


Литералы

Литерал типа Unit

Единственным возможным литералом для типа Unit является значение ().

Значение Unit обычно используется в качестве аргумента вызываемого объекта, например, если не требуется передавать другие аргументы или если нужно отложить выполнение. Оно также используется в качестве возвращаемого значения, если другие значения возвращать не требуется. В частности, это касается унитарных операций, т. е. операций, поддерживающих функтор Adjoint и (или) Controlled.

Литералы типа Int

Значения литералов типа Int могут выражаться в двоичном, восьмеричном, десятичном или шестнадцатеричном представлении. Литералы в двоичном представлении начинаются с префикса 0b, в восьмеричном представлении — с префикса 0o, а в шестнадцатеричном — с префикса 0x. В стандартном десятичном представлении префикс не используется.

Представление Значение литерала
Двоичные данные 0b101010
Восьмеричное 0o52
Decimal 42
Шестнадцатеричный 0x2a

Литералы типа BigInt

Значения литералов типа BigInt всегда имеют постфикс L и могут выражаться в двоичном, восьмеричном, десятичном или шестнадцатеричном представлении. Литералы в двоичном представлении начинаются с префикса 0b, в восьмеричном представлении — с префикса 0o, а в шестнадцатеричном — с префикса 0x. В стандартном десятичном представлении префикс не используется.

Представление Значение литерала
Двоичные данные 0b101010L
Восьмеричное 0o52L
Decimal 42L
Шестнадцатеричный 0x2aL

Литералы типа Double

Значения литералов типа Double могут выражаться в стандартном или экспоненциальном представлении.

Представление Значение литерала
Standard 0.1973269804
Научный 1.973269804e-1

Если дробная часть числа равна нулю, цифра после десятичной точки может быть опущена. Например, 1. является допустимым литералом Double и работает так же, как 1.0.

Литералы типа Bool

Возможные литералы типа Bool — true и false.

Строковые литералы

Значением литерала типа String является последовательность символов Юникода произвольной длины, заключенная в двойные кавычки. Для экранирования символа двойной кавычки, а также для вставки символа новой строки в виде \n, символа возврата каретки в виде \r или символа табуляции в виде \t внутри строки можно использовать символ обратной косой черты \.

Ниже приведены примеры допустимых строковых литералов.

"This is a simple string."
"\"This is a more complex string.\", she said.\n"

Q# также поддерживает интерполированные строки. Интерполированная строка — это строковый литерал, который может содержать любое количество выражений интерполяции. Эти выражения могут иметь произвольные типы. После создания выражения оцениваются, и их представление типа String вставляется в соответствующем месте внутри определенного литерала. Интерполяция осуществляется путем добавления специального символа $ непосредственно перед начальной кавычкой, без пробелов между ними.

Например, если выражение res дает результат 1, второе предложение в следующем литерале типа String будет иметь вид "The result was 1." (Результат равен 1):

$"This is an interpolated string. The result was {res}."

Литералы типа Qubit

Литералов типа Qubit не существует, так как квантовой памятью управляет среда выполнения. Следовательно, значения типа Qubit можно получить только путем выделения.

Значение типа Qubit представляет собой непрозрачный идентификатор, по которому можно адресовать квантовый бит, то есть кубит. Единственный оператор, который оно поддерживает, — сравнение на равенство. Дополнительные сведения о типе данных Qubit см. в разделе Кубиты.

Литералы типа Result

Возможные литералы типа Result — Zero и One.

Значения типа Result представляют результат двоичного квантового измерения. Zero означает проекцию в собственное пространство + 1, а One — проекцию в собственное пространство –1.

Литералы типа Pauli

Возможные литералы типа Pauli — PauliI, PauliX, PauliY и PauliZ.

Значение типа Pauli представляет одну из четырех однокубитных матриц Паули, причем PauliI представляет идентификатор. Значения типа Pauli широко применяются для обозначения оси поворота или для указания базиса, относительно которого производится измерение.

Литералы типа Range

Значения литералов типа Range — это выражения вида start..step..stop, где start, step и end — это выражения типа Int. Если размер шага равен единице, его можно опустить. Например, start..stop является допустимым литералом Range и работает так же, как start..1..stop.

Значение типа Range представляет последовательность целых чисел, первый элемент которой — start, а последующие элементы получаются путем добавления step к предыдущему, пока не будет достигнуто stop. Значения типа Range являются инклюзивными с двух сторон диапазона, т. е. последним элементом диапазона будет stop, если разница между start и stop кратна step. Диапазон может быть пустым, если, например, step — положительное число, а stop < start.

Ниже приведены примеры допустимых литералов типа Range.

  • 1..3 представляет диапазон 1, 2, 3.
  • 2..2..5 представляет диапазон 2, 4.
  • 2..2..6 представляет диапазон 2, 4, 6.
  • 6..-2..2 представляет диапазон 6, 4, 2.
  • 2..-2..1 представляет диапазон 2.
  • 2..1 представляет пустой диапазон.

Дополнительные сведения см. в разделе Контекстные и пропускаемые выражения.

Литералы массивов

Литерал массива представляет собой последовательность из нуля или нескольких выражений, разделенных запятыми и заключенных в квадратные скобки [ и ], например [1,2,3]. Все выражения должны иметь одинаковый базовый тип, который будет типом элементов массива. Если пустой массив указан с []параметром , компилятору может потребоваться заметка типа, чтобы определить соответствующий тип выражения.

Массивы произвольной длины можно создать с помощью выражения массива размера. Такое выражение имеет форму [expr, size = s], где s может быть любым выражением типа Int и expr вычисляется как значение, которое будет повторяться s элементами массива. Например, создает тот же массив, [1.2, size = 3] что и [1.2, 1.2, 1.2].

Литералы типа "кортеж"

Литерал типа кортеж — это последовательность из одного или нескольких разделенных запятыми выражений любого типа, заключенная в круглые скобки (( и )). Тип кортежа включает сведения о типе каждого элемента.

Значение литерала Тип
("Id", 0, 1.) (String, Int, Double)
(PauliX,(3,1)) (Pauli, (Int, Int))

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

Кортежи служат для объединения нескольких значений в одно, что упрощает их передачу. Это позволяет добиться того, что каждый вызываемый объект принимает ровно одно входное значение и возвращает ровно одно выходное.

Литералы для пользовательских типов

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

Например, если тип IntPair состоит из двух элементов типа Int, то IntPair(2, 3) создает экземпляр, вызывая конструктор по умолчанию.

Литералы операций и функций

Анонимные операции и функции можно создать с помощью лямбда-выражения.