Литералы
Литерал типа 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)
создает экземпляр, вызывая конструктор по умолчанию.
Литералы операций и функций
Анонимные операции и функции можно создать с помощью лямбда-выражения.