unreachable!
Rust има няколко интересни начини за стратегическо гърмене с ясна индикация в кода. Един такъв е unreachable!
:
fn foo(x: Option<i32>) {
match x {
Some(n) if n >= 0 => println!("Some(Non-negative)"),
Some(n) if n < 0 => println!("Some(Negative)"),
Some(_) => unreachable!(), // compile error if commented out
None => println!("None")
}
}
Както и да го гледаме, едно число ще е или неотрицателно, или отрицателно. Няма как да влезем в ръкава Some(_)
, понеже вече ще сме влезли в някой друг ръкав. Но Rust няма как да знае това, така че можем да сложим unreachable!()
. Ако случайно се объркаме и, да речем, напишем n > 0
вместо n >= 0
, поне ще получим грешка, която ще ни укаже, че сме омазали нещата. А в кода си личи защо ще има грешка в тази ситуация.
Официалната документация: https://doc.rust-lang.org/std/macro.unreachable.html