元组和元组索引表达式
元组表达式
语法
TupleExpression :
(TupleElements?)TupleElements :
( Expression,)+ Expression?
一个 元组表达式 构造 元组值。
元组表达式的语法是一个由表达式组成的,用逗号分隔的,用括号括起来的列表,这些表达式被称为 元组初始化操作数。
一元元组表达式在其元组初始化操作数后需要一个逗号,以与 括号表达式 区分开。
元组表达式是一种 值表达式,它求值为一个新构造的元组类型的值。
元组初始化操作数的数量是构造的元组的元数 (arity)。
不带任何元组初始化操作数的元组表达式会产生单元元组。
对于其他元组表达式,第一个写入的元组初始化操作数初始化字段 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
元组索引表达式的语法是一个表达式(称为 元组操作数),然后是一个 .,最后是一个元组索引。
元组索引 的语法是一个 十进制字面量,没有前导零、下划线或后缀。例如,0 和 2 是有效的元组索引,而 01、0_ 和 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); }
注意
与字段访问表达式不同,元组索引表达式可以是 调用表达式 的函数操作数,因为它不会与方法调用混淆,因为方法名称不能是数字。
注意
尽管数组和切片也有元素,但你必须使用 数组或切片索引表达式 或 切片模式 来访问它们的元素。