Rust - Enums

Mickey·2022년 1월 14일
0

Rust

목록 보기
19/32
post-thumbnail
post-custom-banner

https://www.tutorialspoint.com/rust/rust_enums.htm

변수 목록에서 값을 선택해야 할 때 열거 데이터 형식을 사용
열거형은 enum 키워드를 사용하여 선언

enum enum_name {
   variant1,
   variant2,
   variant3
}

열거형 사용

derive 속성은 fmt::Debug로 이 enum을 인쇄 가능하게 만드는 데 필요한 구현을 자동으로 생성

// The `derive` attribute automatically creates the implementation
// required to make this `enum` printable with `fmt::Debug`.
#[derive(Debug)]
enum GenderCategory {
   Male,Female
}
fn main() {
   let male = GenderCategory::Male;
   let female = GenderCategory::Female;

   println!("{:?}",male);
   println!("{:?}",female);
}


열거형과 구조체

// The `derive` attribute automatically creates the implementation
// required to make this `enum` printable with `fmt::Debug`.

#[derive(Debug)]
enum GenderCategory {
   Male,Female
}

// The `derive` attribute automatically creates the implementation
// required to make this `struct` printable with `fmt::Debug`.
#[derive(Debug)]
struct Person {
   name:String,
   gender:GenderCategory
}

fn main() {
   let p1 = Person {
      name:String::from("Mohtashim"),
      gender:GenderCategory::Male
   };
   let p2 = Person {
      name:String::from("Amy"),
      gender:GenderCategory::Female
   };
   println!("{:?}",p1);
   println!("{:?}",p2);
}


Option Enum

Option은 Rust 표준 라이브러리에 미리 정의된 열거형
Option은 Some(data)와 None 두 값을 갖고 있음

여기서 형식 T는 모든 형식의 값을 나타냄
Rust는 null 키워드를 지원하지 않음
Option은 함수의 null 반환 용도로 사용 할 수 있음

enum Option<T> {
   Some(T),      //used to return a value
   None          // used to return null, as Rust doesn't support 
   the null keyword
}
fn main() {
   let result = is_even(3);
   println!("{:?}",result);
   println!("{:?}",is_even(30));
}
fn is_even(no:i32)->Option<bool> {
   if no%2 == 0 {
      Some(true)
   } else {
      None
   }
}


Match Statement and Enum

match 문은 열거형에 저장된 값을 비교하는 데 사용할 수 있음

enum CarType {
   Hatch,
   Sedan,
   SUV
}
fn print_size(car:CarType) {
   match car {
      CarType::Hatch => {
         println!("Small sized car");
      },
      CarType::Sedan => {
         println!("medium sized car");
      },
      CarType::SUV =>{
         println!("Large sized Sports Utility car");
      }
   }
}
fn main(){
   print_size(CarType::SUV);
   print_size(CarType::Hatch);
   print_size(CarType::Sedan);
}


Match with Option

fn main() {
   match is_even(5) {
      Some(data) => {
         if data==true {
            println!("Even no");
         }
      },
      None => {
         println!("not even");
      }
   }
}
fn is_even(no:i32)->Option<bool> {
   if no%2 == 0 {
      Some(true)
   } else {
      None
   }
}


Match & Enum with Data Type

열거형의 각 항목에 데이터 형식을 추가할 수 있음

// The `derive` attribute automatically creates the implementation
// required to make this `enum` printable with `fmt::Debug`.
#[derive(Debug)]
enum GenderCategory {
   Name(String),Usr_ID(i32)
}
fn main() {
   let p1 = GenderCategory::Name(String::from("Mohtashim"));
   let p2 = GenderCategory::Usr_ID(100);
   println!("{:?}",p1);
   println!("{:?}",p2);

   match p1 {
      GenderCategory::Name(val)=> {
         println!("{}",val);
      }
      GenderCategory::Usr_ID(val)=> {
         println!("{}",val);
      }
   }
}

profile
Mickey
post-custom-banner

0개의 댓글