本文簡要介紹rust語言中 Macro core::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 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 u64.carrying_mul用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Macro core::unreachable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。