tuple類型
Rust的tuple類型可以存放0個、1個或多個任意數據類型的數據。使用tup.N
的方式可以訪問索引為N的元素。
#![allow(unused)] fn main() { let n = (11, 22, 33); println!("{}", n.0); // 11 println!("{}", n.1); // 22 println!("{}", n.2); // 33 }
注意,訪問tuple元素的索引必須是編譯期間就能確定的數值,而不能是變量。
#![allow(unused)] fn main() { let n = (11, 22, 33); let a: usize = 2; println!("{}", n.a); // 錯誤 }
實際上,n.a
會被Rust解析為對Struct類型的變量n的a字段的訪問。
tuple通常用來作為簡單的數據組合體。
例如:
fn main(){ // 表示一個人的name和age let p_name = "junmajinlong"; let p_age = 23; println!("{}, {}", p_name, p_age); // 與其將有關聯的數據分開保存到多個變量中, // 不如保存在一個結構中 let p = ("junmajinlong", 23); // 同時存放&str和i32類型的數據 println!("{}, {}", p.0, p.1); }
Rust中經常會將tuple類型的各元素賦值給各變量,方式如下:
fn main(){ let p = ("junmajinlong", 23); // 也可以類型推導:let (name,age) = p; let (name, age): (&str, i32) = p; // 比 let name = p.0; let age = p.1; 更簡潔 println!("{}, {}", name, age); }
有時候tuple裡只會保存一個元素,此時必須不能省略最後的逗號:
#![allow(unused)] fn main() { let p = ("junmajinlong",); }
unit類型
不保存任何數據的tuple表示為()
。在Rust中,它是特殊的,它有自己的類型:unit。
unit類型的寫法為()
,該類型也只有一個值,寫法仍然是()
。參考下面的寫法應該能搞清楚。
#![allow(unused)] fn main() { // 將值()保存到類型為()的變量x中 // 類型 值 let x: () = (); }
unit類型通常用在那些不關心返回值的函數中。在其他語言中,那些不寫return語句或return不指定返回內容的的函數,一般表示不關心返回值。在Rust中可將這種需求寫為return ()
。