當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust unreachable用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 Macro core::unreachable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。