复合类型

类型字面量
数组(Arrays)[T; N][20, 30, 40], [0; 3]
元组(Tuples)(), (T,), (T1, T2), …(), ('x',), ('x', 1.2), …

数组的赋值和访问操作:

fn main() {
    let mut a: [i8; 10] = [42; 10];
    a[5] = 0;
    println!("a: {:?}", a);
}

元组的赋值和访问操作:

fn main() {
    let t: (i8, bool) = (7, true);
    println!("t.0: {}", t.0);
    println!("t.1: {}", t.1);
}

关键点:

数组:

  • A value of the array type [T; N] holds N (a compile-time constant) elements of the same type T. Note that the length of the array is part of its type, which means that [u8; 3] and [u8; 4] are considered two different types.

  • 我们可以使用字面量来为数组赋值。

  • 在主函数中,打印(print)语句使用 ? 格式请求调试实现。 使用参数 {} 打印默认输出,{:?} 表示以调试格式输出。 我们也可以不在格式化字符串后面指定变量值,直接使用 {a}{a:?} 进行输出。

  • 添加 #, 比如 {a:#?}, 会输出“美观打印(pretty printing)” 格式, 这种格式可能会更加易读。

元组:

  • 和数组一样,元组也具有固定的长度。

  • 元组将不同类型的值组成一个复合类型。

  • 元组中的字段可以通过英文句号加上值的下标进行访问比如:t.0, t.1

  • 空元组 () 也被称作 “单元(unit)类型”. 它既是一个类型, 也是这种类型的唯一值——也就是说它的类型和它的 值都被表示为 ()。它通常用于表示,比如,一个 函数或表达式没有返回值,我们会在后续的幻灯片种见到这种用法。

    • 你可以将其理解为你可能在其他编程语言中比较熟悉的 void 类型