元组和元组索引表达式
元组表达式
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);
}
注意
尽管数组和切片也有元素,你必须使用 数组或切片索引表达式 或 切片模式 来访问它们的元素。