Refutability
반박 가능성 판정표
패턴이 어떤 값에는 실패하면 반박 가능, 반드시 맞으면 반박 불가능입니다. 위치에 따라 허용되는 패턴이 갈립니다.
반드시 성공해야 하는 자리인가?
그렇다면 irrefutable만 허용됩니다.
위치
Irrefutable
Refutable
판단
let binding
let PATTERN = value
OK
let (x, y) = pair
컴파일 오류
let Some(x) = maybe
항상 성공 필요
실패할 경우 대체 경로가 없기 때문입니다.
if let / while let
조건 분기 자리
허용되지만 경고
if let x = value
OK
if let Some(x) = maybe
실패를 분기로 사용
맞으면 then, 실패하면 else 또는 다음 반복으로 갑니다.
match arm
각 arm의 패턴
OK
_ 또는 value
OK
Some(x), None, 0..=9
여러 실패를 순서대로 검사
전체 match는 모든 가능성을 덮어야 합니다.
fn parameter
함수/클로저 인자
OK
fn f((x, y): (i32, i32))
컴파일 오류
fn f(Some(x): Option<i32>)
호출마다 성공 보장 필요
실패 가능한 검사는 함수 본문에서 match로 처리합니다.
1. 실패할 수 있나
Some(x), 3, 0..=9처럼 일부 값만 맞으면 refutable입니다.
2. 실패 경로가 있나
if let과 match arm은 실패를 다음 분기로 보낼 수 있습니다.
3. 모든 값이 덮이나
match 전체는 누락 없이 exhaustive해야 합니다.