元組
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)。這是因為變數一開始是在結構體裡面的,但接著我們又做了 a
、b
、c
這些不是在結構體裡面的變數。
如果你需要解構,但又不想要所有的變數,你可以使用 _
。
fn main() { let str_vec = vec!["one", "two", "three"]; let (_, _, variable) = (str_vec[0], str_vec[1], str_vec[2]); }
現在它只建立了一個叫 variable
的變數,但沒有為其他值做變數。
還有很多集合型別,及許許多多使用陣列、向量和元組的方式。我們也將學習更多關於它們的知識,但我們將先學習控制流程。