元组和元组索引表达式
元组表达式
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() {
// 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);
}
Note
与字段访问表达式不同,元组索引表达式可以是调用表达式的函数操作数,因为它不能与方法调用混淆,因为方法名称不能是数字。
Note
虽然数组和切片也有元素,但必须使用数组或切片索引表达式或切片模式来访问它们的元素。