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 ()