소개
이 실습에서는 Rust 에서의 바인딩 개념을 탐구합니다. 바인딩은 변수에 간접적으로 접근하고, 재바인딩 없이 변수를 분기하고 사용할 수 있도록 합니다. match 문에서 @ 기호는 값을 이름에 바인딩하는 데 사용됩니다. 값을 특정 범위에 바인딩하는 방법과 Option과 같은 enum 변형을 "구조 분해"하는 방법을 포함한 예제가 제공됩니다.
참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어
main.rs를 사용하고rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.
바인딩
변수에 간접적으로 접근하면 재바인딩 없이 변수를 분기하고 사용하는 것이 불가능합니다. match는 값을 이름에 바인딩하기 위해 @ 기호를 제공합니다.
// `u32` 를 반환하는 함수 `age`.
fn age() -> u32 {
15
}
fn main() {
println!("Tell me what type of person you are");
match age() {
0 => println!("제 생일을 아직 맞이하지 못했습니다"),
// 1 ~ 12 를 직접 `match` 할 수 있지만, 그렇다면 아이의 나이는 얼마입니까?
// 대신 1 ~ 12 의 시퀀스에 대해 `n` 에 바인딩합니다. 이제 나이를 보고할 수 있습니다.
n @ 1 ..= 12 => println!("저는 {:?}살의 어린이입니다", n),
n @ 13 ..= 19 => println!("저는 {:?}살의 청소년입니다", n),
// 아무것도 바인딩되지 않음. 결과를 반환합니다.
n => println!("저는 {:?}살의 어른입니다", n),
}
}
바인딩을 사용하여 Option과 같은 enum 변형을 "구조 분해"할 수도 있습니다.
fn some_number() -> Option<u32> {
Some(42)
}
fn main() {
match some_number() {
// `Some` 변형을 받았습니다. 값이 42 와 같은지 확인합니다. 값은 `n` 에 바인딩됩니다.
Some(n @ 42) => println!("답: {}!", n),
// 다른 숫자를 일치시킵니다.
Some(n) => println!("흥미롭지 않습니다... {}", n),
// 다른 모든 것 (`None` 변형) 을 일치시킵니다.
_ => (),
}
}
요약
축하합니다! 바인딩 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.