复合类型

类型字面量
数组[T; N][20, 30, 40], [0; 3]
元组(), (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!("1st index: {}", t.0);
    println!("2nd index: {}", t.1);
}

要点:

数组:

  • 数组有相同类型的元素,类型是 T,长度是 N,这是一个编译期常量。注意数组的长度是其类型的一部分,也就是说 [u8; 3][u8; 4] 被视为两种不同的类型。

  • 我们可以使用字面量给一个数组赋值。

  • 在 main 函数中,print 语句使用 ? 格式参数请求 debug 实现:{} 给出默认输出,{:?} 给出 debug 输出。我们也可以用 {a}{a:?} 而不用在格式化字符串后面指定值。

  • 添加 #,比如 {a:#?},会调用 “漂亮的打印” 格式,这样更容易阅读。

元组:

  • 和数组一样,元组有一个固定长度。

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

  • 元组的字段可以通过句点和值的索引访问,比如 t.0, t.1

  • 空元组 () 也被叫做 “单元类型”,它既是一个类型,也是这个类型唯一有效的值 - 也就是说它的类型和值都使用 () 表示,它常被用于,比如,表示一个函数或表达式没有返回值,我们会在后面的幻灯片看到这个。

    • 你可以把它当作其它语言的 void,这会让你觉得很熟悉。