OpenSource
를 보다가 enum
을 사용 시 깔끔한 방법이 있어서 간단히 정리한다.
#[derive(Default, PartialEq)]
enum LoginState {
#[default]
Logout,
Login,
}
impl LoginState {
pub fn new() -> Self {
LoginState::default()
}
}
fn main() {
let login_state = LoginState::new();
match login_state {
LoginState::Logout => println!("로그아웃 상태입니다!"),
LoginState::Login => println!("로그인 상태입니다!"),
}
if login_state == LoginState::Login {
println!("로그인 상태입니다!");
} else {
println!("로그아웃 상태입니다!")
}
}
enum
의 값을 확인하기 위해서는 match
와 if
를 활용한다. 위에서 사용한 enum
의 경우 연관된 데이터가 없는 경우이다.
만약에 연관된 데이터가 존재하는 경우는 어떻게 처리해야 하는지 알아보겠다.
#[derive(PartialEq)]
enum UserInput {
KeyBoard(char),
Mouse,
Voice
}
fn main() {
let user_input = UserInput::KeyBoard('a');
match user_input {
UserInput::KeyBoard(c) => println!("keyboard input: {}", c),
UserInput::Mouse => println!("mouse input"),
UserInput::Voice => println!("voice input"),
}
}
만약에 Keyboard
라는 필드 값에 연관 데이터가 존재하여 연관 데이터값을 가져오기 위해서는 패턴 매칭을 해야 한다.
만약에 KeyBoard
에 대한 연관 데이터만 가져오기 위해서라도 match
를 사용해야 한다.
if let
을 사용하면 깔끔하게 가져올 수 있다.
fn main() {
let user_input = UserInput::KeyBoard('a');
if let UserInput::KeyBoard(c) = user_input {
println!("keyboard input: {}", c);
}
}
위처럼 원하는 값만 가져올 수 있다.
요즘 rust로 실제 개발된 opensource
들을 분석 및 공부하고 있는데 알지 못했던 문법 및 표현법들이 있는 것 같다.
좋은 방법들은 정리를 해나갈 것이다.