0%

Rust 013 Enums

Rust Enums

Rust中的枚舉與其他編譯語言(如C)相似,但有一些重要區別,使它們更強大。如果您來自函數式編程背景,Rust稱為枚舉的數通常被稱為代數數據類型。重要的細節是每個枚舉變量都可以具有數據。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
enum Direction {
Up(Point),
Down(Point),
Left(Point),
Right(Point),
}

struct Point{
x: i32,
y: i32,
}

fn main() {
// input::single_input_string_I32();

let u = Direction::Up(Point {x: 0, y: 1});

}

我們接著可以利用match來判斷,現在選的是哪個enum。而在下面這個程式是利用座標來判斷這個變數是屬於哪個enum的,然後再輸出對應的按鍵。而在destruct這個函式中可以看到refref用來表示你要引用一個未打包的值。

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#![allow(dead_code)]
mod input;

#[derive(Debug)]
struct Point{
x: i32,
y: i32,
}

#[derive(Debug)]
enum Direction {
Up(Point),
Down(Point),
Left(Point),
Right(Point),
}

#[derive(Debug)]
enum Keys {
UpKey(String),
DownKey(String),
LeftKey(String),
RightKey(String),
}

impl Direction {
fn match_direction(&self) -> Keys {
match *self{
Direction::Up(_) => Keys::UpKey(String::from("W")),
Direction::Down(_) => Keys::DownKey(String::from("s")),
Direction::Left(_) => Keys::LeftKey(String::from("a")),
Direction::Right(_) => Keys::RightKey(String::from("d")),
}
}
}

impl Keys {
fn destruct(&self) -> &String {
match *self{
Keys::UpKey(ref s) => s,
Keys::DownKey(ref s) => s,
Keys::LeftKey(ref s) => s,
Keys::RightKey(ref s) => s,
}
}
}

fn main() {
// input::single_input_string_I32();

let u = Direction::Up(Point {x: 0, y: 1});
let k = u.match_direction();

println!("{:?}", k);
}