元組

YouTube 上觀看本章內容

Rust 中的元組(tuple)使用 () 表示。我們已經見過很多空元組了,因為函式中的 nothing 實際上意味著一個空元組:

fn do_something() {}

其實是這個的簡寫:

fn do_something() -> () {}

這個函式什麼也得不到(空元組),也不回傳什麼(空元組)。所以我們已經經常使用元組了。當你在函式中不回傳任何東西時,你實際上回傳的是空元組。

fn just_prints() {
    println!("I am printing"); // 加上 ; 表示我們回傳空元組
}

fn main() {}

但是元組可以容納很多東西,也可以容納不同的型別。元組裡面的元素也是用數字 0、1、2 等來被索引的。但要存取它們,你要用 . 而不是 []。讓我們把一大群型別放進元組裡。

fn main() {
    let random_tuple = ("Here is a name", 8, vec!['a'], 'b', [8, 9, 10], 7.7);
    println!(
        "Inside the tuple is: First item: {:?}
Second item: {:?}
Third item: {:?}
Fourth item: {:?}
Fifth item: {:?}
Sixth item: {:?}",
        random_tuple.0,
        random_tuple.1,
        random_tuple.2,
        random_tuple.3,
        random_tuple.4,
        random_tuple.5,
    )
}

印出:

Inside the tuple is: First item: "Here is a name"
Second item: 8
Third item: ['a']
Fourth item: 'b'
Fifth item: [8, 9, 10]
Sixth item: 7.7

這個元組的型別是 (&str, i32, Vec<char>, char, [i32; 3], f64)

你可以使用一個元組來建立多個變數。看看這段程式碼:

fn main() {
    let str_vec = vec!["one", "two", "three"];
}

str_vec 裡面有三個元素。如果我們想把它們拉出來呢?這時我們可以使用元組。

fn main() {
    let str_vec = vec!["one", "two", "three"];

    let (a, b, c) = (str_vec[0], str_vec[1], str_vec[2]); // 叫它們 a, b, 和 c
    println!("{:?}", b);
}

它印出 "two",也就是 b。這就是所謂的解構(destructuring)。這是因為變數一開始是在結構體裡面的,但接著我們又做了 abc 這些不是在結構體裡面的變數。

如果你需要解構,但又不想要所有的變數,你可以使用 _

fn main() {
    let str_vec = vec!["one", "two", "three"];

    let (_, _, variable) = (str_vec[0], str_vec[1], str_vec[2]);
}

現在它只建立了一個叫 variable 的變數,但沒有為其他值做變數。

還有很多集合型別,及許許多多使用陣列、向量和元組的方式。我們也將學習更多關於它們的知識,但我們將先學習控制流程。