本文简要介绍rust语言中 Macro std::unreachable
的用法。
用法
macro_rules! unreachable {
() => { ... };
($msg : expr $(,) ?) => { ... };
($fmt : expr, $($arg : tt) *) => { ... };
}
表示无法访问的代码。
当编译器无法确定某些代码无法访问时,这很有用。例如:
- 将武器与警卫条件相匹配。
- 动态终止的循环。
- 动态终止的迭代器。
如果确定代码不可访问被证明不正确,则程序立即以 panic!
终止。
此宏的不安全对应物是 unreachable_unchecked
函数,如果到达代码,它将导致未定义的行为。
Panics
这将始终是 panic!
,因为unreachable!
只是panic!
的简写,带有固定的特定消息。
与 panic!
一样,此宏具有用于显示自定义值的第二种形式。
例子
比赛武器:
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")
}
}
迭代器:
fn divide_by_three(x: u32) -> u32 { // one of the poorest implementations of x/3
for i in 0.. {
if 3*i < i { panic!("u32 overflow"); }
if x < 3*i { return i-1; }
}
unreachable!("The loop should always return");
}
相关用法
- Rust unreachable_unchecked用法及代码示例
- Rust unreachable用法及代码示例
- Rust unimplemented用法及代码示例
- Rust unit用法及代码示例
- Rust u128.checked_pow用法及代码示例
- Rust usize.wrapping_mul用法及代码示例
- Rust u8.rotate_left用法及代码示例
- Rust u64.rotate_right用法及代码示例
- Rust u16.saturating_add用法及代码示例
- Rust u128.borrowing_sub用法及代码示例
- Rust u64.overflowing_mul用法及代码示例
- Rust usize.wrapping_neg用法及代码示例
- Rust u32.saturating_sub用法及代码示例
- Rust u32.unstable_next_multiple_of用法及代码示例
- Rust u8.pow用法及代码示例
- Rust u128.to_be用法及代码示例
- Rust u32.wrapping_pow用法及代码示例
- Rust u64.log用法及代码示例
- Rust u32.checked_neg用法及代码示例
- Rust usize.checked_div用法及代码示例
- Rust u64.overflowing_sub用法及代码示例
- Rust u16.rem_euclid用法及代码示例
- Rust u32.overflowing_add用法及代码示例
- Rust usize.saturating_pow用法及代码示例
- Rust u8.is_ascii_whitespace用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Macro std::unreachable。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。