当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust unreachable用法及代码示例


本文简要介绍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-lang.org大神的英文原创作品 Macro std::unreachable。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。