元组和元组索引表达式

元组达式

语法
元组表达式 :
   ( 元组元素组? )

元组元素组 :
   ( 表达式 , )+ 表达式?

元组表达式 构造了 元组值

元组表达式的语法是括号包围的、用逗号分隔的表达式列表,称为 元组初始化操作数 。 一元组表达式需要在其元组初始化操作数后面加上逗号,以与 圆括号表达式 区分。

元组表达式是 值表达式 ,它的结果是一个新构造的元组类型的值。 元组初始化操作数的数量是构造的元组的元的数量。 没有元组初始化操作数的元组表达式会产生一个单元元组。 对于其他元组表达式,第一个写入的元组初始化操作数初始化字段 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)

元组索引表达式

语法
元组索引表达式 :
   表达式 . 元组索引

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

元组索引表达式的语法是一个表达式,即 元组操作数 ,后跟一个点号 ( . ) ,最后是一个元组索引。 元组索引的语法是一个 十进制字面值 ,没有前导零、下划线或后缀。 例如,02 是有效的元组索引,但 010_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);
}

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

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