Rust 기본 : 옵션 열거형 (Option enum)
Rust에서 유효한 값을 반환하거나 아무 값도 반환하지 않으려면
Option enum을 사용할 수 있습니다.
enum Option<T> {
None,
Some(T),
}
Option enum에는 두 가지 변형이 있습니다.
하나는 일반적인 값을 포함하는 Some 변형이고,
다른 하나는 None 변형입니다.
Option enum과 그 변형들은 std::prelude에 있습니다.
std::prelude는 Rust가 모든 Rust 프로그램에 자동으로 가져오는 것들의 목록입니다.
따라서 추가 코드 없이도 이들을 사용할 수 있습니다.
std::prelude
https://doc.rust-lang.org/std/prelude/
Option 사용하기.
fn main() {
let username = get_username(1);
match username.clone() {
Some(name) => println!("{name}"),
None => {}
}
// match expression 중에서
// 하나만 사용하고 다른 경우는 버리고 싶다면 if let 사용한다.
// Some
if let Some(name) = username.clone() {
println!("{name}");
}
// None
if let None = username {
println!("Hello World");
}
// if let Some - match 활용
let my_color = Some(String::from("red"));
if let Some(colorname) = my_color {
match colorname.as_str() {
"red" => println!("The color is {}", colorname),
"green" => println!("The color is green"),
"blue" => println!("The color is blue"),
_ => println!("Unknown color"),
}
}
}
fn get_username(user_id: u32) -> Option<String> {
let db_result = String::from("codeself");
if user_id == 1 {
Some(db_result)
} else {
None
}
}
Point 구조체를 Option으로 감싸기.
struct Point {
x: i32,
y: i32,
}
fn main() {
let y: Option<Point> = Some(Point { x: 100, y: 200 });
match &y { // 참조(&), 클론(clone()), 값(y)으로 사용했을 경우 소유권 변화를 생각해보자.
Some(p) => println!("Co-ordinates are {},{}", p.x, p.y),
_ => println!("no match"),
}
y;
}
배열을 전달하여 Option으로 리턴하기.
fn last_element(nums: &[i32]) -> Option<i32> {
if nums.len() > 0 {
Some(nums[nums.len() - 1])
} else {
None
}
}
fn main() {
let my_nums = [1, 1, 2, 3, 5, 8, 13];
match last_element(&my_nums) {
Some(ele) => println!("Last element: {ele}"),
None => println!("Empty array")
}
}
'개발 > 러스트 (Rust)' 카테고리의 다른 글
Rust 기본 : 특성 (Traits) (0) | 2024.09.07 |
---|---|
Rust 기본 : 일반화 (Generics) (0) | 2024.09.03 |
Rust 기본 : 벡터 (Vector) (0) | 2024.08.26 |
Rust 기본 : 결과 열거형 (Result enum) (0) | 2024.08.21 |
Rust 기본, 패턴 매칭 표현식 (Match expression) (0) | 2024.08.13 |
Rust 기본, 열거형 (Enumerations) (0) | 2024.08.10 |
Rust 기본, 구조체 (Struct) Tuple structs (0) | 2024.08.06 |
Rust 기본, 구조체 (Struct) Implementation blocks (0) | 2024.08.01 |