RUST 筆記(三)

東方柏發表於2018-11-07

元組

如:(12,“a”,1.2),

  1. 允許不同型別組成;
  2. 長度固定。

構造體:struct

  1. 構造體中不僅可以有屬性,還可以有方法和函式;
  2. 函式一般寫在 impl 實現中,可以有多個實現;
  3. 關聯函式,類似::newnew 就是關聯函式;
  4. 列印結構體,便於除錯,可以在結構體上加 trail 特性註解#[derive(Debug)]

enum 列舉

enum Coin {
    Penny,
    Nicket,
    Dime,
    Quarter(u32)
}
  1. 列舉的作用是經常作為一個介面的引數型別;
  2. 列舉可以攜帶值;
  3. 列舉也可以像結構體一樣去實現方法。

標準庫中的列舉 Option

enum Option<T> {
    Some(T),
    None,
}
  1. Option 要麼有值,要麼沒有值;
  2. Option 和 T 不是同一個型別;
  3. enum 常和 match 一起使用,並能取出其攜帶的值,_ 是萬用字元,用於匹配沒有列舉出來的情況,常見是_ => (),不做任何處理 ;
  4. Option 和 match 使用會校驗是否處理了 None 的情況。

let if 與 match 控制流

  1. match 既能與列舉匹配,也可以與 option 匹配;
  2. if let 簡寫 match(match 的語法糖,忽略其他模式匹配 _ => ()),如 if let Some(3) = some_value {...}
程式碼
enum Coin {
  Penny,
  Nickel,
  Dime,
  Quarter(String),
}

fn value_in_cents(coin: Coin){
  let mut count = 0;
  match coin {
    Coin::Penny => { // 執行表示式
      println!("Lucky Penny!");
      1
    },
    Coin::Quarter(str) => {
      println!("{}", str); // 攜帶值
      count += 1; 
    },
    _ => () // 匹配其他情況
  }

  // if let 簡化 match 的控制流
  if let Coin:Quarter("different") = coin {
    count += 1;
  }

  // Option 的 Some 和 None
  fn plus_one(x: Option<i32>) -> Option<i32> {
    match x {
      None => None,
      Some(i) => Some(i+1)
    }
  }
  let five = Some(5);
  let six = plus_one(fixe);
  let none = plus_one(None);

}

相關文章