소개
이 실습에서는 Rust 에서 매치 가드를 사용하여 조건에 따라 분기 (arm) 를 필터링하는 방법을 배웁니다. 매치 가드는 패턴 뒤에 추가되며, if 키워드와 조건으로 표현됩니다. 가드 조건은 패턴 일치를 더욱 세분화하고 매치 표현식의 해당 분기를 실행하기 전에 추가적인 검사를 수행할 수 있도록 합니다. 그러나 컴파일러는 패턴 커버리지 검사 시 가드 조건을 고려하지 않으므로 매치 표현식이 여전히 모든 패턴을 커버하는지 확인해야 합니다.
참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어
main.rs를 사용하고rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.
가드
match 가드를 추가하여 분기를 필터링할 수 있습니다.
#[allow(dead_code)]
enum Temperature {
Celsius(i32),
Fahrenheit(i32),
}
fn main() {
let temperature = Temperature::Celsius(35);
// ^ TODO `temperature` 의 다른 값을 시도해 보세요.
match temperature {
Temperature::Celsius(t) if t > 30 => println!("{}C 는 30 도 이상입니다", t),
// ^ `if 조건` 부분이 가드입니다.
Temperature::Celsius(t) => println!("{}C 는 30 도 미만입니다", t),
Temperature::Fahrenheit(t) if t > 86 => println!("{}F 는 86 도 이상입니다", t),
Temperature::Fahrenheit(t) => println!("{}F 는 86 도 미만입니다", t),
}
}
컴파일러는 모든 패턴이 매치 표현식에 의해 커버되는지 확인할 때 가드 조건을 고려하지 않습니다.
fn main() {
let number: u8 = 4;
match number {
i if i == 0 => println!("Zero"),
i if i > 0 => println!("Zero 보다 큽니다"),
// _ => unreachable!("Should never happen."),
// TODO ^ 컴파일 오류를 해결하려면 주석을 해제하세요.
}
}
요약
축하합니다! 가드 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.