Macro std::unimplemented

1.0.0 · source ·
macro_rules! unimplemented {
    () => { ... };
    ($($arg:tt)+) => { ... };
}
Expand description

通过 panic 并带有 “not implemented” 的消息来指示未实现的代码。

这允许您的代码进行类型检查,如果您正在设计原型或实现需要多个您不打算使用所有方法的特征,这将非常有用。

unimplemented!todo! 之间的区别在于,尽管 todo! 传达了稍后实现该功能的意图,并且消息为 “not yet implemented”,但 unimplemented! 并未提出任何此类声明。 它的消息是 “not implemented”。 还有一些 IDE 会标记 todo!

Panics

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

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

Examples

假设我们有一个 Foo trait:

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

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

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

struct MyStruct;

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

    fn baz(&self) {
        // `baz` 和 `MyStruct` 没有任何意义,因此我们完全没有逻辑。
        // 这将显示 "thread 'main' panicked at 'not implemented'"。
        unimplemented!();
    }

    fn qux(&self) -> Result<u64, ()> {
        // 我们这里有一些逻辑,我们可以向未实现中添加一条消息! 显示我们的遗漏。
        // 这将显示: "thread 'main' panicked at 'not implemented: MyStruct isn't quxable'"。
        unimplemented!("MyStruct isn't quxable");
    }
}

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