元组和元组索引表达式

元组表达式

语法

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)

元组索引表达式

语法

TupleIndexingExpression :

   Expression . TUPLE_INDEX

元组索引表达式 用于访问 元组元组结构体 的字段。

元组索引表达式的语法是一个表达式(称为元组操作数),然后是一个 .,最后是一个元组索引。元组索引 的语法是一个没有前导零、下划线或后缀的 十进制字面量。例如,02 是有效的元组索引,但 010_0i32 不是。

元组操作数的类型必须是 元组类型元组结构体。元组索引必须是元组操作数类型的字段的名称。

元组索引表达式的求值除了求值其元组操作数外没有其他副作用。作为 位置表达式,它求值为元组操作数中与元组索引同名的字段的位置。

元组索引表达式的示例

#![allow(unused)]
fn main() {
// Indexing a tuple
let pair = ("a string", 2);
assert_eq!(pair.1, 2);

// Indexing a tuple struct
struct Point(f32, f32);
let point = Point(1.0, 0.0);
assert_eq!(point.0, 1.0);
assert_eq!(point.1, 0.0);
}

注意:与字段访问表达式不同,元组索引表达式可以是 调用表达式 的函数操作数,因为它不能与方法调用混淆,因为方法名不能是数字。

注意:尽管数组和切片也有元素,但您必须使用 数组或切片索引表达式切片模式 来访问它们的元素。