Archive/Rust

[Rustlings] 7. enum

enum은 열거 데이터(enumerate)를 정의하는 예약어다.

#[derive(Debug)]
enum Result {
   Ok,
   Err,
}

fn main() {
	println!("{:?}", Result::Ok);
}

열거 데이터는 단일로 존재할 수 있지만, structure처럼 다른 값을 가질 수 있다. 형태도 structure와 비슷하다.

enum Result {
  Ok(u32),
  Err { code: u32, msg: String },
}

fn main() {
  println!("{}", Result::Err { code: 404, msg: String::from("page not found") });
}

enum 값에 따라 조건부를 다는데는 match가 편하다. 다만 모든 enum 값에 대해 어떻게 처리해야하는지 명시해야한다. 만약 match에서 나열하지 않은 나머지 데이터는 _로 표기하면 된다.

enum Request {
  Quit,
  Message(String),
  ChangeColor(u8, u8, u8),
  Move {x: u8, y: u8},
  Other1,
  Other2,
}

fn process(req: Request) {
  match req {
  	Request::Quit => {
      // ...
    }
    Request::Message(msg) => {
      // ...
    }
    Request::ChangeColor(r, g, b) => {
      // ...
    }
    Request::Move {x, y} => {
      // ...
    }
    _ => {
      // ...
    }
  }
}

'Archive > Rust' 카테고리의 다른 글

[Rustlings] 9. collection  (0) 2021.05.25
[Rustlings] 8. module  (0) 2021.05.22
[Rustlings] 6. struct  (0) 2021.05.16
[Rustlings] 5. Primitive Types  (0) 2021.05.15
[Rustlings] 4. Move Semantics  (0) 2021.05.14