Macro std::unimplemented1.0.0[][src]

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

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

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

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

Panics

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

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

Examples

假设我们有一个 trait Foo:

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

我们想为 ‘MyStruct’ 实现 Foo,但是由于某些原因,只有实现 bar() 函数才有意义。 baz() 在我们的 Foo 实现中仍然需要定义 qux(),但是我们可以在其定义中使用 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