Rust Note(13)_enum(II) with struct

enum 基本型


enum 基本型請參閱 Rust Note(12)_enum(I)

enum 變化型 w/ struct


struct 裡面的 constructor 結構子型態直接指定為 enum 裡面的變數.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 枚舉出星期幾
enum Day {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}

// new 一個 struct, constructor 結構子型態為 enum
struct Weekday {
// struct Weekday 的 constructor weekd 的type 為 enum Day
weekd: Day
}

// impl Weekday
impl Weekday {
fn def_day(&self) -> &str {
// 做 match self.weekd self要明確地指出要match哪一個constructor
match self.weekd {
Day::Saturday | Day::Sunday => return "The day is holiday.",
_ => return "The day is working day."
}
}
}

fn main() {
let a = Weekday {
// 可直接取 enum Day裡面的值
weekd: Day::Sunday
};
println!("{}", a.def_day());
}
// output : The day is holiday.

Working flow:

  • 先把可能的型態枚舉出來 (enum)
  • 把 enum 型態做成對應的 struct 裡面的 constructors
  • 針對 struct 實作 impl
    • 實作 a function daf_day
    • &self 呼叫可套用自己 struct 的參數
    • 使用 match XXX {}
    • 要 match 哪個值 –> self.weekd 自己內部的 constructor, 使用.做呼叫
    • | operator 運算子
    • => 後面接 return XXXXX
      • return XXXXX 的 type 要跟 function 起頭的 -> type 呼應
    • _ => return 除了指定的比對, 其餘的使用下底線代替
  • 回到執行 function main
    • 宣告 a 來自於 struct Weekday
    • 賦予 weekd 的型態值為 Day::Sunday
    • println!() 輸出看結果

Rust Note(13)_20211125