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


Rust unimplemented用法及代码示例


本文简要介绍rust语言中 Macro std::unimplemented 的用法。

用法

macro_rules! unimplemented {
    () => { ... };
    ($($arg : tt) +) => { ... };
}

通过使用 “not implemented” 消息Panics来指示未实现的代码。

这允许您的代码使用type-check,如果您正在原型设计或实现需要多个您不打算全部使用的方法的特征,这将非常有用。

unimplemented! todo! 之间的区别在于,虽然 todo! 传达了稍后实现函数的意图并且消息是 “not yet implemented”,但 unimplemented! 没有这样的声明。它的消息是“not implemented”。还有一些 IDE 会标记 todo!

Panics

这将始终是 panic! ,因为unimplemented! 只是panic! 的简写,带有固定的特定消息。

panic! 一样,此宏具有用于显示自定义值的第二种形式。

例子

假设我们有一个特征 Foo

trait Foo {
    fn bar(&self) -> u8;
    fn baz(&self);
    fn qux(&self) -> Result<u64, ()>;
}

我们想为'MyStruct' 实现Foo,但由于某种原因,只实现bar() 函数才有意义。 baz()qux() 仍然需要在 Foo 的实现中定义,但我们可以在它们的定义中使用 unimplemented! 以允许我们的代码编译。

如果达到未实现的方法,我们仍然希望程序停止运行。

struct MyStruct;

impl Foo for MyStruct {
    fn bar(&self) -> u8 {
        1 + 1
    }

    fn baz(&self) {
        // It makes no sense to `baz` a `MyStruct`, so we have no logic here
        // at all.
        // This will display "thread 'main' panicked at 'not implemented'".
        unimplemented!();
    }

    fn qux(&self) -> Result<u64, ()> {
        // We have some logic here,
        // We can add a message to unimplemented! to display our omission.
        // This will display:
        // "thread 'main' panicked at 'not implemented: MyStruct isn't quxable'".
        unimplemented!("MyStruct isn't quxable");
    }
}

fn main() {
    let s = MyStruct;
    s.bar();
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Macro std::unimplemented。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。