Выражения кортежей и индексации кортежей
Выражения кортежей
Syntax
TupleExpression → ( TupleElements? )
TupleElements → ( Expression , )+ Expression?
Выражение кортежа конструирует значения кортежей.
Синтаксис выражений кортежей - это заключенный в круглые скобки, разделенный запятыми список выражений, называемых операндами инициализатора кортежа.
Одноэлементные выражения кортежей требуют запятую после их операнда инициализатора кортежа, чтобы быть отличимыми от выражения в скобках.
Выражения кортежей являются выражениями-значениями, которые вычисляются в новосозданное значение типа кортежа.
Количество операндов инициализатора кортежа является арностью конструируемого кортежа.
Выражения кортежей без каких-либо операндов инициализатора кортежа производят кортеж-единицу.
Для других выражений кортежей первый записанный операнд инициализатора кортежа инициализирует поле 0, а последующие операнды инициализируют следующее по возрастанию поле.
Например, в выражении кортежа ('a', 'b', 'c'), 'a' инициализирует значение поля 0, 'b' - поле 1, и 'c' - поле 2.
Примеры выражений кортежей и их типов:
| Выражение | Тип |
|---|---|
() | () (единица) |
(0.0, 4.5) | (f64, f64) |
("x".to_string(), ) | (String, ) |
("a", 4usize, true) | (&'static str, usize, bool) |
Выражения индексации кортежей
Syntax
TupleIndexingExpression → Expression . TUPLE_INDEX
Выражение индексации кортежа обращается к полям кортежей и кортежных структур.
Синтаксис выражения индексации кортежа: выражение, называемое операндом кортежа, затем ., и, наконец, индекс кортежа.
Синтаксис для индекса кортежа - это десятичный литерал без ведущих нулей, подчеркиваний или суффикса.
Например, 0 и 2 являются допустимыми индексами кортежей, но не 01, 0_, ни 0i32.
Тип операнда кортежа должен быть типом кортежа или кортежной структурой.
Индекс кортежа должен быть именем поля типа операнда кортежа.
Вычисление выражений индексации кортежей не имеет побочных эффектов, кроме вычисления его операнда кортежа. Как выражение-место, оно вычисляется в местоположение поля операнда кортежа с тем же именем, что и индекс кортежа.
Примеры выражений индексации кортежей:
#![allow(unused)] fn main() { // Индексация кортежа let pair = ("a string", 2); assert_eq!(pair.1, 2); // Индексация кортежной структуры struct Point(f32, f32); let point = Point(1.0, 0.0); assert_eq!(point.0, 1.0); assert_eq!(point.1, 0.0); }
Note
В отличие от выражений доступа к полям, выражения индексации кортежей могут быть функциональным операндом выражения вызова, поскольку они не могут быть спутаны с вызовом метода, так как имена методов не могут быть числами.
Note
Хотя массивы и срезы также имеют элементы, вы должны использовать выражение индексации массива или среза или образец среза для доступа к их элементам.